生产模式下的webpack问题(最小化问题)

时间:2020-04-24 14:55:54

标签: javascript webpack augmented-reality artoolkit jsartoolkit

我正在为增强现实这个小项目进行开发,ARnft它基于Jsartoolkit5的较轻版本,JsartoolkitNFT仅用于 NFT 标记。该代码(部分)遵循 ES6 标准,并将webpack用作捆绑程序。在开发模式下一切都很好,但是当我进入生产模式时,示例卡在了这个错误中:

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 :(得分:0)

可以使用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和问题。