Han*_*nzo 5 web-worker node-modules momentjs ionic3 angular5
我可以将随npm安装的库导入Web worker吗?
我需要将moment.js库用作网络工作者。
它通过安装npm到node_modules/moment目录中
我已经在worker.js文件的顶部尝试过此操作:
importScripts('/node_modules/moment/moment.js');
Run Code Online (Sandbox Code Playgroud)
但是我明白了
GET http://192.168.2.1:8100/node_modules/moment/moment.js 404 (Not Found)
Run Code Online (Sandbox Code Playgroud)
是的,有可能,您可能已经在使用像webpackor这样的流行捆绑器parcel,但即使您不是,它仍然有可能,尽管可能不是直接来自 node_modules
// relative path to the worker from current file
const worker = new Worker('../utils/myWorker.js');
Run Code Online (Sandbox Code Playgroud)
我的工人.js
// use import like you would in any other file
import moment from 'moment';
console.log(`From worker: worker started at ${moment().format('HH:mm:ss')}`);
Run Code Online (Sandbox Code Playgroud)
// relative to the expected public path (have in mind any filename transforms like hashing)
const worker = new Worker('myWorker.bundle.js');
Run Code Online (Sandbox Code Playgroud)
我的工人.js
// use import like you would in any other file
import moment from 'moment';
console.log(`From worker: worker started at ${moment().format('HH:mm:ss')}`);
Run Code Online (Sandbox Code Playgroud)
webpack.config.js
{
entry: {
main: './src/app/main.js'
worker: './src/utils/myWorker.js',
},
output: {
path: `${ROOT_PATH}/public`,
filename: '[name].bundle.js',
}
}
Run Code Online (Sandbox Code Playgroud)
// relative path to the worker from current file
import Worker from '../utils/myWorker.worker.js';
const worker = new Worker();
Run Code Online (Sandbox Code Playgroud)
myWorker.worker.js
// use import like you would in any other file
import moment from 'moment';
console.log(`From worker: worker started at ${moment().format('HH:mm:ss')}`);
Run Code Online (Sandbox Code Playgroud)
webpack.config.js
{
module: {
rules: [
{
test: /\.worker\.js$/,
use: { loader: 'worker-loader' }
}
]
}
}
Run Code Online (Sandbox Code Playgroud)
npm install worker-loader --save-devworker-loader文档https://webpack.js.org/loaders/worker-loader/importScripts('//cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment.min.js');
console.log(`From worker: worker started at ${moment().format('HH:mm:ss')}`);
Run Code Online (Sandbox Code Playgroud)
importScripts出于安全原因,Web Worker 无法访问父文件夹node_modules文件夹通常位于项目的根目录中,因此您无法使用importScripts 对于使用 webpack 作为打包器的项目,只要您可以访问 webpack 配置并对其进行自定义,就可以调整 2 个 webpack 解决方案。
“Webpack (as entry)”示例实际上是从带有 Web Workers 的 Angular CLI 生成的应用程序中借来的
{
"extends": "../generic-tsconfig.json",
"compilerOptions": {
"lib": ["esnext", "webworker"],
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
407 次 |
| 最近记录: |