我使用browserify创建独立模块,我可以在node.js和客户端浏览器中使用。我不在整个应用程序上使用browserify,只使用几个单节点模块。
我做browserify-shim来垫片,例如全球lodash
var
下的_
。
除了在webworkers中使用模块外,这种方法非常有效。
问题是:
当我将lodash
变为_
时,浏览器化代码集var _ = window._
,
但是在Web工作者中没有定义窗口。
我的设置
我使用grunt进行浏览,并在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中的一个问题。
我做错了,还是只能在普通浏览模式下工作?
答案 0 :(得分:2)
我知道这是一篇旧帖子,但我分享了我发现的解决方案,因为这花了我几个小时才找到解决方案。
我设法让web worker作为模块运行 https://github.com/substack/webworkify它可以通过npm install webworkify来实现。
我必须在我的web工作者中执行的任务是将xml字符串解析为javascript,这是我用xmldoc完成的,因为xmldoc不需要DOM,并且Web worker中没有DOM。
我在带有require的web worker中包含了xmldoc,这对于lodash来说是相同的。