サーバーアプリケーション(内部でJSDOMを使用)をWebパックにバンドルすると、次の警告が表示されます。
WARNING in .../node_modules/jsdom/lib/jsdom/utils.js
203:21-40 Critical dependency: the request of a dependency is an expression
問題のコードは次のとおりです。
["canvas", "canvas-prebuilt"].some(moduleName => {
try {
exports.Canvas = require(moduleName);
サーバーコードをバンドルすることはあまり一般的ではないかもしれませんが、266MB( src/
とnode_modules/
)から単一の6MB JSファイル(私の場合)に移行するのは非常に良いことです。
上記のインポートを常に静的に書き換えることを検討しますか? それとも、これを、実際には可能なモジュールが推測される可能性があることを検出できないというバンドラーの欠陥と見なしますか?
(リテラルrequire
パラメーターを使用してif
書き換えられた場合でも、デフォルトではcanvas
もcanvas-prebuilt
も使用できないため、ユーザーは例外を追加する必要がある場合があります。 、ただし、少なくとも問題は明示的に処理されているはずです(そして、ユーザーはこれらを使用していないことを確認する必要があります))。
いいえ、申し訳ありませんが、webpackはサポートされていません。
@domenicなぜwebpackがサポートされていないのですか? これは、群を抜いて最も人気のあるバンドラーです。
jsdomが使用するコードパターンを処理できないためです。
@domenicどのようなコードパターン? webpackには最近、リリースが急増しており、プラグインは無数にあります。 webpackで使用するためのいくつかの良い習慣を思い付くことができると確信しています。 :NS
私はすでにwebpackでjsdomを使用していますが、使用しているdocument / domメソッドは最小限で正常に機能していますが、上記の警告が原因でこの問題が発生しました。 mocha-webpack
が警告を抑制していると思うので、今だけ気づきました。そして、それを投げた後に気づきました。 ただし、mocha-webpackが何も抑制しておらず、これを処理するために何か賢いことをしている可能性があり、そのベストプラクティスを使用できます。
アップデート! :raised_hands:
修正は非常に簡単で、 mocha-webpack
問題から入手しました: https ://github.com/zinserjan/mocha-webpack/issues/6#issuecomment-213957809。 また、このプラグインの使用を推奨するこのドキュメントhttps://github.com/zinserjan/mocha-webpack/blob/master/docs/installation/webpack-configuration.mdがあります。
const nodeExternals = require('webpack-node-externals');
module.exports = {
externals: [nodeExternals()],
// etc configs here
}
最も参考になるコメント
アップデート! :raised_hands:
修正は非常に簡単で、
mocha-webpack
問題から入手しました: https ://github.com/zinserjan/mocha-webpack/issues/6#issuecomment-213957809。 また、このプラグインの使用を推奨するこのドキュメントhttps://github.com/zinserjan/mocha-webpack/blob/master/docs/installation/webpack-configuration.mdがあります。