Webpack - krytyczna zależność: żądanie zależności jest wyrażeniem

86

Otrzymuję trzy komunikaty ostrzegawcze podczas importowania requestw projekcie pakietu webowego w wersji szkieletowej. Minimalny przykład odtworzenia błędu jest dostępny na GitHub (uruchom npm installi npm start).

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ć requirepołączenia statycznie, aby utworzyć minimalny pakiet. Kiedy biblioteka wykorzystuje zmienne lub wyrażenia w sposób wymaga połączenia (takie jak require('' + 'nodent')w tych liniach o ajv) WebPACK nie można rozwiązać je statycznie i importu cały pakiet.

Moje uzasadnienie jest takie, że ten dynamiczny import nie jest pożądany w produkcji, a kod powinien być chroniony przed ostrzeżeniami. Oznacza to, że chcę dowolnego rozwiązania, które rozwiązuje problem. Na przykład:

  1. Ręcznie skonfiguruj pakiet internetowy, aby zaimportować wymagane biblioteki i zapobiec wystąpieniu ostrzeżeń.
  2. Dodanie hack.jspliku do mojego projektu, który w jakiś sposób zastępuje wywołania wymagania.
  3. Aktualizuję moje biblioteki. ajv-5.0.1-beta.3ma poprawkę, która wycisza ostrzeżenia. Jeśli jednak chcę z niego korzystać, muszę poczekać, aż zostanie wydany, a następnie do har-validatori requestwydać kolejne aktualizacje. Jeśli istnieje sposób na wymuszenie har-validatorkorzystania z wersji beta ajv, rozwiązałoby to mój problem.
  4. Inny
Jodiug
źródło
1. github.com/epoberezkin/ajv/issues/117#issuecomment-198328830 2. Myślę, że to nie zadziała 3. Będziesz musiał trochę poczekać.
szczególnie
@esp: ten komentarz na githubie wydaje się być tym, czego szukam, ale nie ucisza ostrzeżeń. Jeśli zmienię to na new webpack.IgnorePlugin(/async/, /ajv/), dwa z trzech ostrzeżeń znikną, ale pakiet webowy Cannot find module "../async". Masz jakiś pomysł na temat odpowiedniej wartości magicznej, aby to zadziałało?
Jodiug
Link do przykładu kodu github jest uszkodzony. Pls umieścić kod bezpośrednio w pytaniu.
CodeChimpy

Odpowiedzi:

25

Rozwiązany z npm install [email protected] --save

Zdaniem autorów ajvproblem zostanie prawdopodobnie rozwiązany w najnowszej wersji requestza kilka tygodni.

Jodiug
źródło
@maembe spróbuj npm remove requestponownie zainstalować, a następnie package.jsonusuń ^przed numerem wersji. Jeśli opuścisz ^, pakiet może zostać zaktualizowany po znaku npm updatei ostrzeżenie pojawi się ponownie.
Jodiug,
Nie działa dla mnie. Ale sugestia @DhirendraNk w innej odpowiedzi poniżej, czyli zamiana webpacka.ContextReplacementPlugin zadziałała dla mnie.
Will
10

Zastąp to

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

z tym-

new webpack.ContextReplacementPlugin( /(.+)?angular(\\|\/)core(.+)?/, root('./src'), {} )
DhirendraNk
źródło
8
To działa. Byłoby miło, gdybyśmy uzyskali bardziej szczegółowe wyjaśnienie, dlaczego zmiana wyrażenia regularnego rozwiązuje ten problem.
atconway
To działa dla mnie, denerwujące było zobaczenie ostrzeżenia, dzięki.
Will
2
czy ktoś wie, gdzie znaleźć ten kod? Nie mogę znaleźć kodu do zastąpienia.
Prem popatia
2
To działa, ponieważ mówisz System.Importfunkcji, gdzie znaleźć kod źródłowy w node_modulesfolderze. Ścieżka zmienia się w zależności od używanej wersji Angular. Powinien lepiej sobie z tym poradzić zespół Angular, mam nadzieję, że już tak było.
Robert Brisita
1

To ostrzeżenie można powiązać z wstrzyknięciami pakietów w (zależności lub devDependencies).

Jeśli problem pojawi się nagle, sprawdź ostatnią modyfikację w pliku package.json.

Rozważ usunięcie package-lock.json, jeśli planujesz ponownie uruchomić plik npm install.

KŁAMSTWA - CHIOUKH
źródło