【发布时间】:2017-11-27 12:44:32
【问题描述】:
我正在尝试在我们的网站中添加一个 emscripten 编译模块。为了实现这一点,我正在使用 browserify(带有 babelify 转换)。
在创建 bundle 时出现问题:emscripten 代码被包装在生成的 js 文件中,但 Module 是一个空对象。代码实际上正在被解析,如下图所示:
长话短说:
import Module from "./main";
console.log(Module._int_sqrt(9));
返回此错误:
_main2.default._int_sqrt is not a function
我正在处理一些限制:无法将脚本直接添加到 html 页面。此构建步骤的输出必须是单个 js 文件,包括其所有依赖项。
我创建了一个最小的测试用例here,所以任何人都可以复制这个问题。
我将不胜感激这方面的任何指导,因为我认为这不是 emscripten 或 browserify 中的错误。
最后一点:源 cpp 代码可以正常工作。您可以运行用 mocha 编写的测试来检查它。
【问题讨论】:
-
我在使用 uglify npm 模块时遇到了类似的问题,错误是我在 js 中有一个错误代码,结果是一个空文件,检查 js 文件,尤其是返回文字对象而不是 vars ,祝你好运
-
如果你检查js文件,我只是导入模块,并打印导入结果。该错误与js本身无关。 emscripten 模块在节点环境中正确处理(如 mocha 测试演示)。问题来自 browserify 完成的自动捆绑,它检测环境是浏览器,因此我期望表现得像 nodejs 模块(将自身绑定到 module.exports 变量)
-
我要做的是:1) 编译没有优化的模块 2) 检查使用 browserify 设置了哪些变量 3) 尝试查看编译模块中的流程 4) 变量是否正确?
-
1) 未设置任何优化 2) 正在创建模块,并且实际调用了 run() 函数 3) 流程正确,直到需要 invokes the "main" file (由 "5" 引用) 4 ) 变量是正确的,但是它们被评估的闭包丢失了
标签: gulp browserify amd emscripten