如何浏览独立模块以在WebWorkers中使用

时间:2014-04-30 18:33:22

标签: node.js gruntjs web-worker browserify lodash

我使用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中的一个问题。

我做错了,还是只能在普通浏览模式下工作?

1 个答案:

答案 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来说是相同的。