我正在使用 browserify 创建我可以在 node.js 和浏览器客户端中使用的独立模块。我没有在整个应用程序上使用 browserify,只是几个单 Node 模块。
我做 browserify-shim 来填充例如lodash
在全局 var
_
下。
这非常有效,除非在 webworkers 中使用模块。
问题是:
当我将 lodash
填充为 _
时,浏览器代码设置 var _ = window._
,
但是 windows 没有在网络 worker 内部定义。
我的设置
我使用 grunt 进行 browserify,并在我的 package.json 中配置了 browserify-shim
map.js:(commonJS模块,在node.js中直接使用)
var _ = require('lodash-node');
module.exports = _.map;
GruntFile.js:
// Browserify
grunt.loadNpmTasks('grunt-browserify');
grunt.initConfig({
browserify: {
'map': {
options: {
bundleOptions: {
standalone: 'MapModule'
}
},
src: ['./map.js'],
dest: './output/map-module.js'
}
}
});
grunt.registerTask('default', [
'browserify'
]);
package.json:(部分)
{
"name": "APP NAME",
"version": "0.0.0",
"description": "",
"main": "app.js",
"browserify": {
"transform": [
"browserify-shim"
]
},
"browserify-shim": {
"lodash-node": "global:_"
},
}
输出
browserify 生成的输出如下所示: https://gist.github.com/mikaelhm/859735472c9b0038770e
注意第 2 行:var _ = (window._);
这是 Web Worker 中的一个问题。
是我做错了,还是它只能在正常浏览模式下工作?
最佳答案
我知道这是一篇旧帖子,但我正在分享我找到的解决方案,因为我花了几个小时才找到解决方案。
我设法让网络 worker 作为模块运行 https://github.com/substack/webworkify它可以通过 npm install webworkify 获得。
我必须在我的 web worker 中执行的一项任务是将 xml 字符串解析为 javascript,这是我用 xmldoc 完成的,因为 xmldoc 不需要 DOM,而且 web worker 中没有 DOM。
我在我的 web worker 中包含了 xmldoc 和 require,这对于 lodash 也是一样的。
关于node.js - 如何在 WebWorkers 中浏览器化独立模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23395551/