Проблема с веб-пакетом в производственном режиме (проблема минимизации) - PullRequest
0 голосов
/ 24 апреля 2020

Я работаю над этим небольшим проектом для дополненной реальности, ARnft он основан на более легкой версии Jsartoolkit5, JsartoolkitNFT только для NFT маркеров. Код соответствует стандарту ES6 (частично) и использует webpack в качестве компоновщика. Все нормально в режиме разработки, но когда я go в производственном режиме, пример застрял с этой ошибкой:

05ff8846-4121-4380-86c3-9612f404732a:1 Uncaught SyntaxError: Function statements require a function name

Это останавливается на встроенном Worker. Приложение не входит внутрь, потому что в противном случае я получу некоторые сообщения в консоли разработчика. Я вставляю Worker в объект Blob:

// create a Worker to handle loading of NFT marker and tracking of it
const workerBlob = new Blob(
  [workerRunner.toString().replace(/^function .+\{?|\}$/g, '')],
    { type: 'text/js-worker' }
  )
const workerBlobUrl = URL.createObjectURL(workerBlob)

worker = new Worker(workerBlobUrl)

https://github.com/kalwalt/ARnft/blob/8322585aa0f863917c6d1cee541356ff3b7c36a0/src/utils/Utils.js#L207 -L213

workerRunner, определенный в этой строке:

https://github.com/kalwalt/ARnft/blob/8322585aa0f863917c6d1cee541356ff3b7c36a0/src/utils/Utils.js#L272

Я думаю, что это проблема минимизации, которую я пытался добавить --optimize-minimize в сценарий:

"build-es6": "webpack --mode production --optimize-minimize",

, но не помогло. Как я могу решить это?

Спасибо

1 Ответ

0 голосов
/ 27 апреля 2020

Эта проблема может быть решена с помощью плагина worker-loader .

Вместо встраивания работника в BLOB-объект, как объяснено в вопросе:

  • создать внешний Worker. js и импортировать в файл (в данном случае Utils. js):
import Worker from './Worker.js' 
  • использовать работника как обычно:
let worker
// other code
worker = new Worker()
// other code with postMessage and onmesssage...
  • в wepback.config. js
{
  test: /\worker\.js$/,
    use: {
      loader: 'worker-loader',
        options: { inline: true, fallback: false }
    }
}

Вы также можете увидеть этот commit и проблему в webpack .

...