node.js - 如何在 WebWorkers 中浏览器化独立模块

标签 node.js gruntjs web-worker browserify lodash

我正在使用 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/

相关文章:

javascript - bootstrap + jade 复选框

javascript - 如何在不丢失横幅文本的情况下使用 grunt-contrib-less 进行压缩?

css - grunt-sass 两次调用 mixin 导致错误

javascript - 如何优化动态加载 HTML5 游戏世界的 Canvas 渲染?

javascript - Web-Worker 导入的脚本能否依次导入另一个脚本?

javascript - NodeJS/ExpressJS : Serving single concatenated JS file in production

node.js - 如何通过Electron注册JS对象?

javascript - Grunt files api 创建了不需要的文件

javascript - 使用 WebWorker 时,从导入其他类的文件中导入类会导致 Angular 8 编译失败

node.js - CasperJS 与 MongoDB NPM 模块