GLPK.js 正确加载与初始化指南

陌雪君_6731

陌雪君_6731

2026-10-27

870人浏览

原创

GLPK.js 正确加载与初始化指南

本文详解如何在本地开发环境中正确加载并初始化 GLPK.js,解决常见的 CORS 阻塞和 Uncaught ReferenceError: glpk is not defined 等典型错误,涵盖本地文件引入与 CDN 引入两种可靠方案。

本文详解如何在本地开发环境中正确加载并初始化 glpk.js,解决常见的 cors 阻塞和 `uncaught referenceerror: glpk is not defined` 等典型错误,涵盖本地文件引入与 cdn 引入两种可靠方案。

GLPK.js 是一个基于 WebAssembly 的线性规划求解器,可在浏览器中直接运行 GLPK(GNU Linear Programming Kit)。但因其模块设计与浏览器安全策略限制,开发者常遇到两类核心问题:一是本地 file:// 协议下因 CORS 策略导致脚本无法加载;二是误用 ES 模块导入方式,导致 glpk 全局对象未定义或命名导出不匹配。以下提供经验证的、生产就绪的解决方案。

✅ 方案一:本地引入(推荐用于离线/内网环境)

禁止使用 import 语句加载本地 .js 文件(如 import GLPK from './dist/glpk.min.js'),因为浏览器在 file:// 协议下会拒绝跨源请求,触发如下错误:

Access to script at 'file:///.../glpk.min.js' from origin 'null' has been blocked by CORS policy...

✅ 正确做法是使用传统 <script></script> 标签同步加载,并依赖其自动挂载的全局 initGLPK 函数:

<script src="./dist/glpk.min.js"></script><script type="module">
  (async () => {
    const glpk = await initGLPK(); // 注意:不是 GLPK(),而是 initGLPK()

    // 后续调用示例(如运输问题求解)
    const lp = {
      name: 'Transportation Problem',
      objective: { direction: glpk.GLP_MIN, name: 'obj', vars: [...] },
      subjectTo: [...]
    };

    const solution = await glpk.solve(lp, { msglev: glpk.GLP_MSG_OFF });
    console.log('Optimal solution:', solution);
  })();
</script>

⚠️ 注意事项:

  • glpk.min.js 必须通过本地 Web 服务器(如 http-server、live-server 或 VS Code Live Server 插件)提供服务,不能双击 HTML 文件直接打开;
  • 若坚持使用 file:// 协议,需启动 Chrome 时添加启动参数禁用 CORS(仅限开发调试):
    chrome.exe --user-data-dir="/tmp/chrome_dev" --disable-web-security

✅ 方案二:CDN 引入(推荐用于快速原型与在线演示)

CDN 上的 glpk.min.js 并非标准 ES 模块(无 export default),因此 import GLPK from '...' 会报错:

JS X Monitor
JS X Monitor

X.com (Twitter) 账号监控自动化:定时抓取指定账号最新推文,发现新内容即时推送通知。

下载
Uncaught SyntaxError: The requested module ... does not provide an export named 'default'

✅ 正确方式是使用 命名导入语法 import { initGLPK } from '...',或更简洁地采用默认导入别名(因 CDN 版本实际导出的是 initGLPK 函数):

<script type="module">
  // ✅ 推荐:显式导入 initGLPK(语义清晰,兼容性强)
  import { initGLPK } from 'https://cdn.jsdelivr.net/npm/glpk@1.0.3/dist/glpk.min.js';

  (async () => {
    const glpk = await initGLPK();

    // 示例:构建并求解最小成本运输问题
    const supply = [20, 30, 25];
    const demand = [10, 25, 20, 20];
    const costs = [[8,6,10,9], [9,12,13,7], [14,9,16,5]];

    const variables = [];
    for (let i = 0; i < supply.length; i++) {
      for (let j = 0; j < demand.length; j++) {
        variables.push({ name: `x_${i}_${j}`, coef: costs[i][j] });
      }
    }

    const constraints = [];
    // 供应约束(等式:∑x_ij = supply_i)
    supply.forEach((s, i) => {
      constraints.push({
        name: `supply_${i}`,
        vars: Array.from({ length: demand.length }, (_, j) => ({ name: `x_${i}_${j}`, coef: 1 })),
        bnds: { type: glpk.GLP_FX, lb: s, ub: s }
      });
    });

    // 需求约束(等式:∑x_ij = demand_j)
    demand.forEach((d, j) => {
      constraints.push({
        name: `demand_${j}`,
        vars: Array.from({ length: supply.length }, (_, i) => ({ name: `x_${i}_${j}`, coef: 1 })),
        bnds: { type: glpk.GLP_FX, lb: d, ub: d }
      });
    });

    const lp = {
      name: 'Transportation Problem',
      objective: { direction: glpk.GLP_MIN, name: 'obj', vars: variables },
      subjectTo: constraints
    };

    const result = await glpk.solve(lp, { msglev: glpk.GLP_MSG_OFF });
    console.log('Solution status:', result.status); // e.g., "opt"
    console.log('Objective value:', result.objval);
  })();
</script>

? 补充说明:

  • glpk@1.0.3 是当前稳定版本(请以 npmjs.com/package/glpk 最新版本为准);
  • initGLPK() 返回 Promise,内部完成 WebAssembly 初始化,*必须 await 后才能使用 `glpk.` API**;
  • 所有常量(如 glpk.GLP_MIN, glpk.GLP_FX)均在 glpk 实例上定义,不可提前引用。

✅ 总结

场景 正确加载方式 关键要点
本地开发(离线) <script src="./dist/glpk.min.js"></script> + await initGLPK() 避免 file:// 协议,启用本地 HTTP 服务
在线演示 / 快速测试 import { initGLPK } from 'https://cdn.jsdelivr.net/.../glpk.min.js' 不要 import GLPK from ...,不支持 default export

只要遵循上述任一规范,即可彻底规避 glpk is not defined 和 CORS 报错,稳定调用 GLPK.js 求解线性规划与整数规划问题。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

js

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
html版权符号
html版权符号

html版权符号是“©”,可以在html源文件中直接输入或者从word中复制粘贴过来,php中文网还为大家带来html的相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。

2023.06.14

6655

7

html在线编辑器
html在线编辑器

html在线编辑器是用于在线编辑的工具,编辑的内容是基于HTML的文档。它经常被应用于留言板留言、论坛发贴、Blog编写日志或等需要用户输入普通HTML的地方,是Web应用的常用模块之一。php中文网为大家带来了html在线编辑器的相关教程、以及相关文章等内容,供大家免费下载使用。

2023.06.21

3712

4

html网页制作
html网页制作

html网页制作是指使用超文本标记语言来设计和创建网页的过程,html是一种标记语言,它使用标记来描述文档结构和语义,并定义了网页中的各种元素和内容的呈现方式。本专题为大家提供html网页制作的相关的文章、下载、课程内容,供大家免费下载体验。

2023.07.31

3370

5

html空格
html空格

html空格是一种用于在网页中添加间隔和对齐文本的特殊字符,被用于在网页中插入额外的空间,以改变元素之间的排列和对齐方式。本专题为大家提供html空格的相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.01

3399

5

html是什么
html是什么

HTML是一种标准标记语言,用于创建和呈现网页的结构和内容,是互联网发展的基石,为网页开发提供了丰富的功能和灵活性。本专题为大家提供html相关的各种文章、以及下载和课程。

2023.08.11

5039

6

html字体大小怎么设置
html字体大小怎么设置

在网页设计中,字体大小的选择是至关重要的。合理的字体大小不仅可以提升网页的可读性,还能够影响用户对网页整体布局的感知。php中文网将介绍一些常用的方法和技巧,帮助您在HTML中设置合适的字体大小。

2023.08.11

3341

3

html转txt
html转txt

html转txt的方法有使用文本编辑器、使用在线转换工具和使用Python编程。本专题为大家提供html转txt相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.31

3149

3

html文本框代码怎么写
html文本框代码怎么写

html文本框代码:1、单行文本框【<input type="text" style="height:..;width:..;" />】;2、多行文本框【textarea style=";height:;"></textare】。

2023.09.01

2748

6

HTML嵌入CSS样式的方法
HTML嵌入CSS样式的方法

HTML嵌入CSS样式的方法有内联样式、内部样式表和外部样式表。本专题为大家提供CSS样式相关的文章、下载、课程内容,供大家免费下载体验。

2023.09.20

2848

5

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
WEB前端教程【HTML5+CSS3+JS】
WEB前端教程【HTML5+CSS3+JS】

共101课时 | 21.2万人学习

JS进阶与BootStrap学习
JS进阶与BootStrap学习

共39课时 | 4.9万人学习