0

ARnftは、 NFTマーカーのみのJsartoolkit5 、 JsartoolkitNFTの軽量バージョンに基づいています。コードはES6標準に (部分的に) 準拠し、バンドラーとして webpack を使用します。開発モードではすべて問題ありませんが、本番モードにすると、例が次のエラーでスタックしました。

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

埋め込まれた Worker で停止します。そうしないと、開発コンソールでいくつかのメッセージを受け取るため、アプリは中に入りません。Blob オブジェクトに Worker を挿入します。

// 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",

、しかし助けにはなりませんでした。どうすればこれを解決できますか?

ありがとうございました

4

1 に答える 1

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 }
    }
}

このコミットwebpackの問題も確認できます。

于 2020-04-27T08:51:45.010 に答える