【问题标题】:How do I require() web workers in npm?我如何在 npm 中 require() 网络工作者?
【发布时间】:2016-11-12 21:03:50
【问题描述】:

我有一个 npm/webpack 设置,我的部分应用程序需要 Web Workers。通常,Web Worker 使用以下语法创建:

var worker = new Worker('path/to/external/js/file.js');

在 npm 中,这不起作用,因为我使用的开发环境不接受这样的路径。必须使用require() 包含文件。

我不能只链接到文件,因为这违反了跨域规则。

是否有包含这些工作文件的策略?

【问题讨论】:

  • 您是否尝试在 Node 中运行您的网络工作者?
  • 不,我正在为前端开发。也许这个问题更适合 webpack,但我无法要求将外部工作文件包含在包中。
  • new Worker() 代码在客户端运行; Node 或 npm 想要什么并不重要,因为就服务器而言,代码只是内容。工作文件将从客户端通过一个普通的旧 HTTP 请求获取到您传递给 new Worker() 的 URL。
  • 是的,问题出在我的开发环境中。我不能只从我正在使用的服务器设置中获取文件,也不能从其他地方链接绝对路径,因为 CORS。

标签: javascript node.js npm webpack web-worker


【解决方案1】:

Webpack 提供的worker-loader 加载器似乎为您的问题提供了解决方案。这个模块可以用npm install --save-dev worker-loader安装。

看看how to use loaders,然后像这样要求你的网络工作者文件:

const Foo = require("worker!./path/to/external/js/file.js");
const fooWorker = new Foo();

注意路径前的worker!,它告诉Webpack专门使用worker loader。

如果您的设置正确,您也应该能够在工作文件本身中正常要求模块。

【讨论】:

  • 似乎有效!这出乎意料地容易。谢谢。
猜你喜欢
  • 1970-01-01
  • 2011-01-20
  • 1970-01-01
  • 1970-01-01
  • 2015-03-16
  • 2020-05-17
  • 1970-01-01
  • 2014-06-08
相关资源
最近更新 更多