web-dev-qa-db-fra.com

Webpack - Dépendance critique: la demande d'une dépendance est une expression

Je reçois trois messages d’avertissement lors de l’importation de request dans un projet barebone webpack. Un exemple minimal pour reproduire le bogue est disponible sur GitHub (exécutez npm install Et npm start).

Critical dependency: the request of a dependency is an expression

Comment puis-je me débarrasser de cet avertissement?


Plus d'information:

Webpack essaie de résoudre require appels statiquement pour créer un paquet minimal. Lorsqu'une bibliothèque utilise des variables ou des expressions dans un appel obligatoire (tel que require('' + 'nodent') dans ces lignes sur ajv), Webpack ne peut pas les résoudre de manière statique et importe l'ensemble du package. .

Mon raisonnement est que cette importation dynamique n'est pas souhaitable en production et qu'il vaut mieux garder le code sans avertissement. Cela signifie que je veux toute solution qui résout le problème. Par exemple.:

  1. Configurez manuellement webpack pour importer les bibliothèques requises et empêcher les avertissements de se produire.
  2. Ajouter un fichier hack.js À mon projet qui remplace les appels requis d'une certaine manière.
  3. Mise à niveau de mes bibliothèques. ajv-5.0.1-beta.3 A un correctif qui met les avertissements en sourdine. Cependant, si je veux l’utiliser, je dois attendre qu’elle soit publiée, puis jusqu’à ce que har-validator Et request publient les mises à jour ultérieures. S'il existe un moyen de forcer har-validator À utiliser la version bêta de ajv, cela résoudrait mon problème.
  4. Autre
43
Jodiug

Résolu avec npm install [email protected] --save

Selon les auteurs de ajv, le problème sera probablement résolu dans la dernière version de request dans quelques semaines.

22
Jodiug

Remplacez ceci

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

avec ça-

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