如何将像 moment.js 这样的库导入 Web Worker [英] How to import a library like moment.js into a web worker

查看:32
本文介绍了如何将像 moment.js 这样的库导入 Web Worker的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我可以将安装了 npm 的库导入到 web worker 中吗?

Can I import a library installed with npm into a web worker?

我需要在 Web Worker 中使用 moment.js 库.

I need to use the moment.js library into a web worker.

通过npm安装到node_modules/moment目录

我已经在 worker.js 文件的顶部尝试过这个:

I already have tried with this at the top of the worker.js file:

importScripts('/node_modules/moment/moment.js');

但是我明白了

GET http://192.168.2.1:8100/node_modules/moment/moment.js 404 (Not Found)

推荐答案

是的,有可能,您可能已经在使用像 webpackparcel 这样的流行打包工具,但即使你不是它仍然有可能,虽然可能不是直接来自 node_modules

Yes, it's possible, chances are you're already using a popular bundler like webpack or parcel, but even if you're not it's still possible, though probably not directly from node_modules

// relative path to the worker from current file
const worker = new Worker('../utils/myWorker.js');

myWorker.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')}`);

使用 Webpack(作为入门)

main.js

// relative to the expected public path (have in mind any filename transforms like hashing)
const worker = new Worker('myWorker.bundle.js');

myWorker.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')}`);

webpack.config.js

{
  entry: {
    main: './src/app/main.js'
    worker: './src/utils/myWorker.js',
  },
  output: {
    path: `${ROOT_PATH}/public`,
    filename: '[name].bundle.js',
  }
}

使用 Webpack (worker-loader)

安装加载器

// relative path to the worker from current file
import Worker from '../utils/myWorker.worker.js';

const worker = new Worker();

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')}`);

webpack.config.js

{
  module: {
    rules: [
      {
        test: /\.worker\.js$/,
        use: { loader: 'worker-loader' }
      }
    ]
  }
}

使用 CRA (Create React App) (worker-loader) 内联加载器

使用内联加载器

/* eslint-disable import/no-webpack-loader-syntax */
import Worker from "worker-loader!./myWorker.worker.js";

const worker = new Worker();

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')}`);

您始终可以从 CDN 导入库

myWorker.js

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')}`);

其他打包工具

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆