Otrzymuję trzy komunikaty ostrzegawcze podczas importowania request
w projekcie pakietu webowego w wersji szkieletowej. Minimalny przykład odtworzenia błędu jest dostępny na GitHub (uruchom npm install
i 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ć require
połą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:
- Ręcznie skonfiguruj pakiet internetowy, aby zaimportować wymagane biblioteki i zapobiec wystąpieniu ostrzeżeń.
- Dodanie
hack.js
pliku do mojego projektu, który w jakiś sposób zastępuje wywołania wymagania. - Aktualizuję moje biblioteki.
ajv-5.0.1-beta.3
ma poprawkę, która wycisza ostrzeżenia. Jeśli jednak chcę z niego korzystać, muszę poczekać, aż zostanie wydany, a następnie dohar-validator
irequest
wydać kolejne aktualizacje. Jeśli istnieje sposób na wymuszeniehar-validator
korzystania z wersji betaajv
, rozwiązałoby to mój problem. - Inny
new webpack.IgnorePlugin(/async/, /ajv/)
, dwa z trzech ostrzeżeń znikną, ale pakiet webowyCannot find module "../async"
. Masz jakiś pomysł na temat odpowiedniej wartości magicznej, aby to zadziałało?Odpowiedzi:
Rozwiązany z
npm install [email protected] --save
Zdaniem autorów
ajv
problem zostanie prawdopodobnie rozwiązany w najnowszej wersjirequest
za kilka tygodni.źródło
npm remove request
ponownie zainstalować, a następniepackage.json
usuń^
przed numerem wersji. Jeśli opuścisz^
, pakiet może zostać zaktualizowany po znakunpm update
i ostrzeżenie pojawi się ponownie.Zastąp to
z tym-
źródło
System.Import
funkcji, gdzie znaleźć kod źródłowy wnode_modules
folderze. Ś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.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
.źródło