1

私のプロジェクトでは、require.js を pdf.js ライブラリと一緒に長い間使用してきました。Pdf.js は最近までグローバル オブジェクトに配置されていました。シムを使用して、requirejs構成で引き続き使用できます。pdfjs ライブラリは、pdf.worker という別のライブラリをロードします。このモジュールを見つけるための解決策は、workerSrc と呼ばれるグローバル PDFJS オブジェクトにプロパティを追加し、ディスク上のファイルを指すことでした。これは、pdfjs ライブラリをロードする前またはロードした後に行うことができます。pdfjs ライブラリは、pdf.worker を使用して WebWorker を開始します。そのためには、ソース ファイルへのパスが必要です。

プロジェクトの pdfjs ライブラリを新しいバージョン (1.5.314) に更新しようとしたときに、ライブラリをロードしてインクルードする方法が UMD モジュールを使用するように変更され、すべてが少しトリッキーになりました。

pdfjs ライブラリは、環境が requirejs を使用しているかどうかをチェックするため、「pdfjs-dist/build/pdf」という名前のモジュールとして自身を定義します。このモジュールがロードされると、「pdfjs-dist/build/pdf.worker」という名前のモジュールがチェックされます。私は別のフォルダー構造を持っているので、新しいパスでそれらを私のrequirejs構成オブジェクトに追加しました:

paths: {
    "pdfjs-dist/build/pdf": "vendor/pdfjs/build/pdf",
    "pdfjs-dist/build/pdf.worker": "vendor/pdfjs/build/pdf.worker"
}

これは、モジュールローダーがモジュールをまったく見つけられるようにするためです。開発中、これはうまく機能します。ただし、grunt ビルド ステップで requirejs オプティマイザーを使用しようとすると、すべてのプロジェクト ファイルが 1 つのファイルにまとめられます。この手順では、pdf.worker モジュールも含めようとしますが、これによりエラーが生成されます。

エラー: uglify2 ファイルを作成できません: vendor/pdfjs/build/pdf.worker.js。それをスキップします。エラー: RangeError: 最大呼び出しスタック サイズを超えました

ワーカー ソースはディスク上の単一のファイルにある必要があるため、このモジュールを含めたくありません。そのため、requirejs 構成で 2 つの異なる構成設定を試しました。最初の試みは、grunt ビルド オプションの paths プロパティをオーバーライドすることでした。

paths: {
    "pdfjs-dist/build/pdf.worker": "empty:"
}

テストする 2 番目のことは、モジュールから除外することです。

modules: [{
    name: "core/app",
    exclude: [
        "pdfjs-dist/build/pdf.worker"
    ]
}]

どちらの手法もオプティマイザーにモジュールを含めないように指示する必要がありますが、どちらの試行も以前と同じエラーで終了しました。requirejs オプティマイザーは引き続きモジュールをビルドに含めようとし、それを醜くしようとすると RangeError が発生します。

醜いステップが失敗したため、それは含まれず、私は自分のビジネスに取り掛かることができると主張することができますが、醜いステップがpdfjsの新しい更新で機能し始める場合はどうなりますか?

ビルドステップでrequirejs構成がそれを除外しない理由と、それを行う方法を誰かが理解するのを手伝ってくれますか?

4

1 に答える 1