2017-03-20 8 views
17

Ich erhalte drei Warnmeldungen beim Import von request in ein Webpack-Projekt von barebone. Ein minimales Beispiel, um den Fehler zu reproduzieren, ist unter GitHub (Lauf npm install und npm start) verfügbar.Webpack - Kritische Abhängigkeit: Die Anforderung einer Abhängigkeit ist ein Ausdruck

Critical dependency: the request of a dependency is an expression

Wie kann ich diese Warnung loswerden?


Weitere Informationen:

Webpack versucht require Anrufe zu lösen statisch ein minimales Bündel zu machen. Wenn eine Bibliothek Variablen in einem Require-Aufruf verwendet (z. B. these lines in ajv), kann Webpack sie nicht statisch auflösen und das gesamte Paket importieren.

Mein Grund ist, dass dieser dynamische Import in der Produktion nicht wünschenswert ist, und Code wird am besten warntfrei gehalten. Das heißt, ich möchte eine Lösung, die das Problem löst. Zum Beispiel:

  1. Manuelles Konfigurieren von Webpack, um die erforderlichen Bibliotheken zu importieren und zu verhindern, dass Warnungen auftreten.
  2. Hinzufügen einer hack.js Datei zu meinem Projekt, die die Anforderungen in irgendeiner Weise überschreibt.
  3. Aktualisieren meiner Bibliotheken. ajv-5.0.1-beta.3 hat einen Fix, der die Warnungen zum Schweigen bringt. Allerdings, wenn ich es verwenden möchte, muss ich warten, bis es freigegeben wird, und dann bis har-validator und request spätere Updates freigeben. Wenn es eine Möglichkeit gibt, har-validator zu zwingen, die Betaversion von ajv zu verwenden, würde das mein Problem lösen.
  4. Andere
+0

1. https://github.com/epoberezkin/ajv/issues/117#issuecomment-198328830 2. Ich glaube nicht, es wird funktionieren 3. Sie müssen etwas warten. – esp

+0

@esp: Dieser GitHub-Kommentar scheint das zu sein, wonach ich suche, aber die Warnungen werden nicht stummgeschaltet. Wenn ich es in 'new webpack.IgnorePlugin (/ async /,/ajv /)' ändere, sind zwei von drei Warnungen weg, aber webpack 'Kann das Modul" ../ async "nicht finden. Irgendeine Idee über den richtigen magischen Wert, damit es funktioniert? – Jodiug

Antwort

16

Gelöst mit npm install [email protected] --save

Nach Ansicht der Autoren von ajv, wird das Problem wahrscheinlich in der neuesten Version von request in wenigen Wochen Zeit gelöst werden.

+7

Dieser Fehler ist unwirklich nervig. Noch immer ungelöst, bricht eine Tonne Bibliotheken da draußen. – eveo

+0

Ich kann es nicht mit jeder Version – maembe

+0

@maembe versuchen versuchen 'npm remove request' und neu installieren, dann in' package.json' entfernen Sie das '^' vor der Versionsnummer. Wenn Sie das '^' verlassen, wird das Paket möglicherweise nach einem 'npm update' aktualisiert und die Warnung erscheint erneut. – Jodiug

2

dieses Ersetzen

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

mit this-

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

Das funktioniert. Es wäre nett für eine tiefergehende Erklärung, warum die reguläre Ausdruckänderung dieses Problem behebt. – atconway

Verwandte Themen