Я провел, пожалуй, самый худший день в моей жизни, пытаясь заставить веб-работников работать в приложении для создания реакции.
Если я просто импортирую
import VoiceWorker from './voice.worker.js'
И
voiceWorker = new Worker(VoiceWorker)
voiceWorker.postMessage({command:'start'})
Он отлично работает локально, но не на сервере, где не удается найти рабочий файл.
Так что я следовал различным инструкциям, я не могу использовать метод встроенного блоба, потому что у веб-работника есть зависимости.
Я обновил React-Scripts до 2.0.5, потому что где-то я читал, что он поддерживаетдля веб-работников, но это не так.
Я использовал библиотеку worker-loader, использовал react-app-rewired
С переопределением конфигурации ниже
const path = require('path')
const WorkerPlugin = require('worker-plugin')
module.exports = function override(config, env) {
config.module.rules.push({
test: /\.worker\.js$/,
use: { loader: 'worker-loader' },
})
config.plugins.push(new WorkerPlugin())
config.output.globalObject= `this`
return config
}
И import VoiceWorker from 'worker-loader!./voice.worker.js'
Теперь он пытается загрузить работника с указанного ниже URL-адреса и завершается неудачно: https://localhost:3000/course/function()%20%7B%20%20return%20new%20Worker(webpack_require.p%20+%20%220306a1085789e37891cf.worker.js%22);%7D
Я попробовал подключаемый модуль работника, как указано выше, и он ничего не делает.
Я загружал его раньше, и 'окно' было неопределенным, но эта строка config.output.globalObject = this
исправила это.
Пожалуйста, кто-нибудь может подсказать, как заставить рабочих загружаться вReact!