2017-03-20 34 views
17

Otrzymuję trzy ostrzeżenia podczas importowania request w projekcie webowego barebone. Minimalny przykład odtworzenia błędu jest dostępny pod adresem GitHub (uruchom npm install i npm start).Webpack - zależność krytyczna: żądanie zależności jest wyrażeniem

Critical dependency: the request of a dependency is an expression

Jak mogę pozbyć się tego ostrzeżenia?


Więcej informacji:

WebPACK próbuje rozwiązać require połączeń statycznie, aby minimalny pakiet. Gdy biblioteka używa zmiennych w wywołaniu wymagającym (takim jak these lines w ajv), Webpack nie może ich statycznie rozwiązać i zaimportować cały pakiet.

Moje uzasadnienie polega na tym, że ten dynamiczny import nie jest pożądany w produkcji, a kod najlepiej jest zachować bez ostrzeżenia. Oznacza to, że chcę rozwiązania, które rozwiąże problem. Np .:

  1. Ręcznie skonfiguruj pakiet sieci Web, aby zaimportować wymagane biblioteki i zapobiec występowaniu ostrzeżeń.
  2. Dodanie do mojego projektu pliku hack.js, który w pewien sposób przesłania wymagane połączenia.
  3. Uaktualnianie moich bibliotek. ajv-5.0.1-beta.3 ma poprawkę, która wycisza ostrzeżenia. Jednak jeśli chcę z niego korzystać, muszę poczekać, aż zostanie zwolniony, a następnie do har-validator i request wydać kolejne aktualizacje. Jeśli istnieje sposób wymuszenia na har-validator używania wersji beta ajv, rozwiąże to mój problem.
  4. Inne
+0

1. https://github.com/epoberezkin/ajv/issues/117#issuecomment-198328830 2. Nie sądzę to zadziała 3. będziesz musiał trochę poczekać. – esp

+0

@esp: ten komentarz githuba wydaje się być tym, czego szukam, ale nie milknie w ostrzeżeniach. Jeśli zmienię go na 'new webpack.IgnorePlugin (/ async /,/ajv /)', dwa z trzech ostrzeżeń zniknęły, ale pakiet sieci Web 'Nie można znaleźć modułu" ../ async "'. Masz pojęcie o odpowiedniej magicznej wartości, żeby to zadziałało? – Jodiug

Odpowiedz

16

rozwiązany npm install [email protected] --save

Według autorów ajv, problem prawdopodobnie zostanie rozwiązany w najnowszej wersji request w ciągu kilku tygodni.

+7

Ten błąd jest irytujący. Nadal nierozwiązane, dzieli mnóstwo bibliotek. – eveo

+0

Nie mogę go uruchomić z żadną wersją – maembe

+0

@można wypróbować 'npm remove request' i ponownie zainstalować, następnie w' package.json' usuń '^' przed numerem wersji. Jeśli opuścisz '^', pakiet może zostać zaktualizowany po aktualizacji 'npm" i ostrzeżenie pojawi się ponownie. – Jodiug

2

Wymień ten

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

z to-

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

To działa. Byłoby miło dla bardziej dogłębnego wyjaśnienia, dlaczego zmiana wyrażenia regularnego rozwiązuje ten problem. – atconway