网络工作者中的RequireJS

时间:2013-12-31 21:47:20

标签: javascript requirejs web-worker

我正在尝试在Web worker中使用RequireJS。问题是我在使用它时不断收到以下错误。 Uncaught Error: importScripts failed for underscore at ./lib/underscore.js

我已经测试了我的配置选项,它们只会在导入Underscore时导致此错误。他们在这里:

{
    baseUrl: './',
    paths: {
        jquery: 'lib/jquery',
        underscore: 'lib/underscore'
    },
    shim: {
        underscore: {
            exports: '_'
        }
    }
}

如有必要,我可以添加更多信息。该项目的来源位于https://github.com/isaach1000/canvas的GitHub上。

更新:修复RequireJS仍然没有运气,但我使用Grunt任务修复了我的问题。这是配置:

requirejs: {
    worker: {
            options: {
                baseUrl: 'js',
                name: 'task',
                out: 'build/task.js',
                paths: {
                    jquery: 'lib/jquery',
                    underscore: 'lib/underscore'
                },
                shim: {
                    underscore: {
                        exports: '_'
                    }
                },
                include: ['lib/require.js'],
                optimize: 'none'
            }
     }
}

1 个答案:

答案 0 :(得分:3)

您是否使用require

importScripts正确加载到工作人员中?
importScripts('path/to/require.js');

require({ ... });

test in the require repo是一个非常好的例子,也见乍得在How to use Web Workers into a Module build with Requirejs?中的回答

网络工作者有一个dedicated global scope。在您发布问题之后,Underscore在版本1.6.0(February 2014之前)不使用AMD时,问题很可能会加剧。

我强烈建议您按照本杰明对原始问题的评论建议使用importScripts()MDN)。

标准定义可在https://html.spec.whatwg.org/multipage/workers.html#importing-scripts-and-libraries

找到

确保require适用于不同平台webWorkers中{{1}}的所有库的麻烦是不值得的,并且性能明智不会受到任何打击,因为工作人员不会影响主应用程序的性能。