标签: worker-loader

如何使用 webpack 的 worker loader 加载 web worker

我正在尝试使用 webpack 的 worker loader 将 web worker 脚本加载到我的 React 应用程序中。但是,我收到一个未找到模块的错误。

未找到 ./src/index.js 模块中的错误:错误:无法解析 'C:\Users\wyrm\Documents\Project\src' 中的 './file.worker'

这是我的 src/index.js,它是 webpack 的入口点

import React from "react";
import ReactDOM from "react-dom";
import Worker from "./file.worker";

const worker = new Worker();
worker.postMessage({ message: "Hello there" });

const Index = () => <div>Hello there General Kenobi!</div>;

ReactDOM.render(<Index />, document.getElementById("index"));
Run Code Online (Sandbox Code Playgroud)

我在 Project/public 文件夹中有名为 file.worker.js 的网络工作者脚本

/* eslint-env worker */

onmessage = e => {
  const message = e.data;
  console.log(`[From Main]: ${message}`);
};
Run Code Online (Sandbox Code Playgroud)

这是我的 webpack 配置文件: …

javascript reactjs webpack worker-loader

9
推荐指数
1
解决办法
9464
查看次数

当我尝试缓存xxx.worker.js时,服务工作者将无法安装

我的Vue应用程序中有以下服务工作者代码:

main.js

if (navigator.serviceWorker) {
  navigator.serviceWorker.register('/service-worker.js').catch(function() {
    console.log('Service worker registration failed.');
  });
}
Run Code Online (Sandbox Code Playgroud)

服务worker.js

let currCacheName = 'premium-poker-tools-5';

self.addEventListener('install', function(event) {
  event.waitUntil(
    caches.open(currCacheName).then(function(cache) {
      let promise = cache.addAll([
        '/',
        'app.js',
        'c7d016677eb7e912bc40.worker.js',
        'f328c7e2b379df12fa4c.worker.js',
        'static/logo.png',
        'static/favicon.png',
        'static/loading.svg',
        'static/cards/ace-of-clubs.png',
        'static/cards/king-of-clubs.png',
        'static/cards/queen-of-clubs.png',
        'static/cards/jack-of-clubs.png',
        'static/cards/ten-of-clubs.png',
        'static/cards/nine-of-clubs.png',
        'static/cards/eight-of-clubs.png',
        'static/cards/seven-of-clubs.png',
        'static/cards/six-of-clubs.png',
        'static/cards/five-of-clubs.png',
        'static/cards/four-of-clubs.png',
        'static/cards/three-of-clubs.png',
        'static/cards/two-of-clubs.png',
        'static/cards/ace-of-spades.png',
        'static/cards/king-of-spades.png',
        'static/cards/queen-of-spades.png',
        'static/cards/jack-of-spades.png',
        'static/cards/ten-of-spades.png',
        'static/cards/nine-of-spades.png',
        'static/cards/eight-of-spades.png',
        'static/cards/seven-of-spades.png',
        'static/cards/six-of-spades.png',
        'static/cards/five-of-spades.png',
        'static/cards/four-of-spades.png',
        'static/cards/three-of-spades.png',
        'static/cards/two-of-spades.png',
        'static/cards/ace-of-hearts.png',
        'static/cards/king-of-hearts.png',
        'static/cards/queen-of-hearts.png',
        'static/cards/jack-of-hearts.png',
        'static/cards/ten-of-hearts.png',
        'static/cards/nine-of-hearts.png',
        'static/cards/eight-of-hearts.png',
        'static/cards/seven-of-hearts.png',
        'static/cards/six-of-hearts.png',
        'static/cards/five-of-hearts.png',
        'static/cards/four-of-hearts.png',
        'static/cards/three-of-hearts.png',
        'static/cards/two-of-hearts.png',
        'static/cards/ace-of-diamonds.png',
        'static/cards/king-of-diamonds.png',
        'static/cards/queen-of-diamonds.png',
        'static/cards/jack-of-diamonds.png',
        'static/cards/ten-of-diamonds.png',
        'static/cards/nine-of-diamonds.png', …
Run Code Online (Sandbox Code Playgroud)

javascript web-worker service-worker cachestorage worker-loader

8
推荐指数
1
解决办法
411
查看次数

出乎意料的“!” 在 'worker-loader!mapbox-gl/dist/mapbox-gl-csp-worker'

嗨,我正在本教程中尝试在 React 中使用 mapbox-gl 。我收到此错误: 意外的“!” 在 'worker-loader!mapbox-gl/dist/mapbox-gl-csp-worker' 中 导入“worker-loader!mapbox-gl/dist/mapbox-gl-csp-worker”

这是我的重要代码:

地图.js

import React from 'react'
import mapboxgl from 'mapbox-gl/dist/mapbox-gl-csp';
import MapboxWorker from 'worker-loader!mapbox-gl/dist/mapbox-gl-csp-worker';

mapboxgl.workerClass = MapboxWorker;
mapboxgl.accessToken = " the token ";

export default class Map extends React.Component {
    constructor(props) {
        super(props);
        this.state = {
            lng: -70.9,
            lat: 42.35,
            zoom: 9
        };
        this.mapContainer = React.createRef();
    }
    componentDidMount() {
        const { lng, lat, zoom } = this.state;
        const map = new mapboxgl.Map({
            container: this.mapContainer.current,
            style: 'mapbox://styles/mapbox/streets-v11',
            center: [lng, …
Run Code Online (Sandbox Code Playgroud)

syntax-error reactjs mapbox-gl worker-loader

8
推荐指数
1
解决办法
1652
查看次数

使用带有打字稿的 webpack worker-loader 导致找不到模块错误

我已经使用 webpack webworker 加载器有一段时间了。我们现在正在迁移到 Angular 7 并开始使用 typescript。

在遵循许多指南和教程以及这个惊人的问题帖子之后:https : //github.com/webpack-contrib/worker-loader/issues/94#issuecomment-336596520

我不断收到错误,并且没有让工作加载器使用打字稿。

[at-loader] 中的错误....../import/worker/index.ts:4:58 TS2306: 文件“....../import/worker/import.worker.ts”不是模块.

[at-loader] 中的错误......./import/import.component.ts:13:11 TS2304:找不到名称“MyWorkerImport”。

我目前的设置如下:

网络包配置:

module: {
    rules: [
        {
            test: /\.worker\.ts$/,
            use: [
                {
                    loader: 'worker-loader',
                    options: {
                        name: '[name].[hash].js',
                        publicPath: '/'
                    }
                },
                {
                    loader: 'awesome-typescript-loader',
                    options: {
                        configFileName: rootPath + '/tsconfig.json'
                    }
                }
            ]
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

配置文件

{
    "compilerOptions": {
        "target": "es5",
        "module": "commonjs",
        "moduleResolution": "node",
        "sourceMap": true,
        "emitDecoratorMetadata": true,
        "experimentalDecorators": true,
        "lib": [ "es6", "dom" ],
        "noImplicitAny": false, …
Run Code Online (Sandbox Code Playgroud)

typescript webpack angular worker-loader

7
推荐指数
1
解决办法
6467
查看次数

Webpack worker-loader无法编译Typescript worker

我按照worker-loader文档中的说明配置项目,并且能够使用正确的d.ts使TS代码intel正常工作。

但是,在webpack构建过程中会引发错误,我不明白为什么。

 ERROR in ./src/test.worker.ts
Module parse failed: Unexpected token (1:9)
You may need an appropriate loader to handle this file type.
| const ctx: Worker = self as any;
| ctx.addEventListener('message', event => {
|   console.log(event);
Run Code Online (Sandbox Code Playgroud)

我的工作人员文件内容test.worker.ts

 ERROR in ./src/test.worker.ts
Module parse failed: Unexpected token (1:9)
You may need an appropriate loader to handle this file type.
| const ctx: Worker = self as any;
| ctx.addEventListener('message', event => {
|   console.log(event);
Run Code Online (Sandbox Code Playgroud)

申请表 index.ts

typescript webpack worker-loader

6
推荐指数
2
解决办法
2917
查看次数

如何使用 worker-loader 配置创建反应应用程序

我需要使用多个工作人员创建一个 CRA(create-react-app) 应用程序。例如(我的工作人员包括导入模块):

// worker.js
import x from 'file-xxx.js'
addEventListener('message', e => {
   // ...
})
Run Code Online (Sandbox Code Playgroud)
// App.jsx

App(){
   const mWorker = new Worker('./worker') 
   mWorker.postMessage('data...')

   // ...

}
Run Code Online (Sandbox Code Playgroud)

我想如果有人帮助我构建一个具有上述要求的简单 create react 应用程序。

目前我看到:

-- https://webpack.js.org/loaders/worker-loader/

-- https://github.com/GoogleChromeLabs/comlink

-- https://github.com/GoogleChromeLabs/worker-plugin

reactjs create-react-app worker-loader

6
推荐指数
1
解决办法
2134
查看次数

带有 Vue 和 Bundling 的 Service Workers

我使用Vue 2Common.js来生成一个 AMD Bundle。我需要能够在运行时自动注册我的服务工作者。有用的东西:

https://www.npmjs.com/package/worker-plugin

https://www.npmjs.com/package/worker-loader

我需要 service worker 的原因是为了发送通知。但是,我对此遇到了麻烦,因为似乎唯一支持的工作人员是在 DedicatedWorkerGlobalScope 或 SharedWorkers 中。但是,为了发送“showNotification”,我需要Service Worker 类型

所以基本上我做什么:

import Worker from "worker-loader!./Worker.js"

const worker = new Worker()
Run Code Online (Sandbox Code Playgroud)

像魅力一样工作,就像这个(Worker Plugin):

const worker = new Worker('./worker.js', { type: 'module' });
Run Code Online (Sandbox Code Playgroud)

然而,总是正常的工人。那些不是服务人员,我几个小时以来一直在试图解决这个问题。是否缺少更改类型的配置?一些见解会很棒。

为了说明我试图实现的目标:

在此处输入图片说明

Service Worker 的注册需要在运行时自动发生,而我不必引用绝对或相对 url。

关于我如何实现我想要完成的目标的任何见解?

web-worker commonjs vue.js service-worker worker-loader

6
推荐指数
1
解决办法
165
查看次数

如何使用worker-loader通过webworkers创建打字稿库

我尝试使用网络工作者创建打字稿库。当我使用 webpack-dev-server 测试我的代码时,一切看起来都不错,所有文件都找到了,但是当我让 npm run build 并尝试在另一个本地项目(npm install /local/path)中使用 lib 时,我GET http://localhost:8080/X.worker.js 在浏览器控制台中看到。

webpack.config.js:

const path = require('path');

module.exports = {
    devtool: 'inline-source-map',
    entry: {
        'mylib': './src/index.ts',
        'mylib.min': './src/index.ts',
    },
    output: {
        path: path.resolve(__dirname, '_bundles'),
        filename: '[name].js',
        libraryTarget: 'umd',
        library: 'mylib',
        umdNamedDefine: true
    },
    resolve: {
        extensions: ['.ts', '.tsx', '.js']
    },
    optimization: {
        minimize: true
    },
    module: {
        rules: [
            {
                test: /\.tsx?$/,
                loader: 'awesome-typescript-loader',
                exclude: /node_modules/,
                query: {
                    declaration: false,
                }
            },
            {
                test: /\.worker\.js$/,
                use: {
                    loader: …
Run Code Online (Sandbox Code Playgroud)

javascript web-worker typescript webpack worker-loader

3
推荐指数
1
解决办法
4289
查看次数