Webpack-重要な依存関係:依存関係のリクエストは式です


86

requestベアボーンWebpackプロジェクトにインポートすると、3つの警告メッセージが表示されます。バグを再現するための最小限の例は、GitHubで入手できます(実行npm installおよびnpm start)。

Critical dependency: the request of a dependency is an expression

この警告を取り除くにはどうすればよいですか?


詳しくは:

Webpackは、require呼び出しを静的に解決して最小限のバンドルを作成しようとします。でライブラリの使用変数または式が(のような呼び出し必要とする場合require('' + 'nodent')におけるこれらの行のをajv)、WebPACKのは、静的にそれらを解決し、パッケージ全体をインポートすることはできません。

私の理論的根拠は、この動的インポートは本番環境では望ましくなく、コードは警告なしに保つのが最善であるということです。つまり、問題を解決するソリューションが必要です。例えば:

  1. 必要なライブラリをインポートし、警告が発生しないようにwebpackを手動で構成します。
  2. hack.js何らかの方法でrequire呼び出しをオーバーライドするファイルをプロジェクトに追加します。
  3. ライブラリをアップグレードします。ajv-5.0.1-beta.3警告を消音する修正があります。ただし、使用したい場合は、リリースされるまで待ってから、後続のアップデートhar-validatorrequestリリースするまで待つ必要があります。har-validatorのベータ版を強制的に使用する方法があれば、それでajv問題は解決します。
  4. その他

1. github.com/epoberezkin/ajv/issues/117#issuecomment-1983288302。うまくいかないと思います3.少し待つ必要があります。
特に2017年

@esp:そのgithubコメントは私が探しているもののようですが、警告を黙らせることはありません。に変更するとnew webpack.IgnorePlugin(/async/, /ajv/)、3つの警告のうち2つが消えますが、webpackCannot find module "../async"です。それを機能させるための適切な魔法の値について何か考えはありますか?
Jodiug 2017年

githubコード例へのリンクが壊れています。plsはコードを直接質問に入れます。
CodeChimpy

回答:


25

で解決 npm install request@2.79.0 --save

の作者によるとajv、この問題はrequest数週間以内にの最新バージョンで解決される可能性があります。


@maembeを試しnpm remove requestて再インストールしpackage.json^から、バージョン番号の前のを削除してください。を離れる^と、パッケージが更新されnpm update、警告が再度表示される場合があります。
Jodiug 2017

私のために働いていませんでした。しかし、以下の別の回答での@DhirendraNkによる提案は、webpack.ContextReplacementPluginを置き換えることでした。
ウィル

10

これを交換してください

new webpack.ContextReplacementPlugin(
        /angular(\\|\/)core(\\|\/)@angular/,
        helpers.root('./src'), // location of your src
        {} // a map of your routes
    ),

これとともに-

new webpack.ContextReplacementPlugin( /(.+)?angular(\\|\/)core(.+)?/, root('./src'), {} )

8
これは機能します。正規表現の変更によってこの問題が修正される理由について、より詳細に説明するとよいでしょう。
atconway 2018年

これは私にとってはうまくいきます、ありがとう、警告を見るのは面倒です。
ウィル

2
誰かがこのコードを見つける場所を知っていますか?置き換えるコードが見つかりません。
Prempopatia19年

2
これSystem.Importは、node_modulesフォルダー内のソースコードの場所を関数に指示しているために機能します。使用しているAngularのバージョンに応じてパスが変わります。Angularチームによってより適切に処理される必要があります。うまくいけば、すでに処理されています。
RobertBrisita19年

1

この警告は、(dependanciesまたはdevDependencies)のパッケージインジェクションにリンクできます。

問題が突然発生した場合は、package.jsonの最後の変更を確認してください。

を再起動する場合は、package-lock.jsonを削除することを検討してくださいnpm install

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.