Jsdom: 「依存関係のリクエストは表現です」(Webpackとバンドルする場合)

作成日 2017年11月24日  ·  5コメント  ·  ソース: jsdom/jsdom

基本情報:

  • Node.jsバージョン: 8.9.1
  • jsdomバージョン: 11.4.0

サーバーアプリケーション(内部で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書き換えられた場合でも、デフォルトではcanvascanvas-prebuiltも使用できないため、ユーザーは例外を追加する必要がある場合があります。 、ただし、少なくとも問題は明示的に処理されているはずです(そして、ユーザーはこれらを使用していないことを確認する必要があります))。

最も参考になるコメント

アップデート! :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
}

全てのコメント5件

いいえ、申し訳ありませんが、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
}
このページは役に立ちましたか?
0 / 5 - 0 評価

関連する問題

kilianc picture kilianc  ·  4コメント

khalyomede picture khalyomede  ·  3コメント

Progyan1997 picture Progyan1997  ·  3コメント

tolmasky picture tolmasky  ·  4コメント

jacekpl picture jacekpl  ·  4コメント