Webpack — Критическая зависимость: запрос зависимости — это выражение

Я получаю три предупреждающих сообщения при импорте request в базовый проект веб-пакета. Минимальный пример для воспроизведения ошибки доступен на GitHub (запустите npm install и npm start).

Critical dependency: the request of a dependency is an expression

Как я могу избавиться от этого предупреждения?


Дополнительная информация:

Webpack пытается статически разрешить require вызовов, чтобы сделать минимальный пакет. Когда библиотека использует переменные или выражения в вызове require (например, require('' + 'nodent') в эти строки из ajv), Webpack не может разрешить их статически и импортирует весь пакет.

Мое объяснение заключается в том, что такой динамический импорт нежелателен в рабочей среде, и код лучше не содержать предупреждений. Это означает, что я хочу любое решение, которое решает проблему. Например.:

  1. Вручную настройте веб-пакет для импорта необходимых библиотек и предотвращения появления предупреждений.
  2. Добавление файла hack.js в мой проект, который каким-то образом переопределяет вызовы require.
  3. Обновление моих библиотек. ajv-5.0.1-beta.3 есть исправление, отключающее предупреждения. Однако, если я хочу использовать его, я должен ждать, пока он не будет выпущен, а затем, пока har-validator и request не выпустят последующие обновления. Если есть способ заставить har-validator использовать бета-версию ajv, это решит мою проблему.
  4. Другой

person Jodiug    schedule 20.03.2017    source источник
comment
1. github.com/epoberezkin/ajv/issues/117#issuecomment-198328830 2. Я не думаю, что это сработает. 3. Вам придется немного подождать.   -  person esp    schedule 20.03.2017
comment
@esp: этот комментарий github, кажется, то, что я ищу, но он не отключает предупреждения. Если я изменю его на new webpack.IgnorePlugin(/async/, /ajv/), два из трех предупреждений исчезнут, но webpack Cannot find module "../async". Любая идея о правильном магическом значении, чтобы заставить его работать?   -  person Jodiug    schedule 21.03.2017
comment
Ссылка на пример кода github не работает. Пожалуйста, поместите код прямо в вопрос.   -  person CodeChimpy    schedule 28.05.2019


Ответы (4)


Решено с помощью npm install [email protected] --save

По словам авторов ajv, проблема, скорее всего, будет решена в последней версии request через несколько недель.

person Jodiug    schedule 21.03.2017
comment
@maembe попробуйте npm remove request и переустановите, затем в package.json удалите ^ перед номером версии. Если вы оставите ^, пакет может быть обновлен после npm update и снова появится предупреждение. - person Jodiug; 25.08.2017
comment
Не работает для меня. Но предложение @DhirendraNk в другом ответе ниже, касающееся замены webpack.ContextReplacementPlugin, сработало для меня. - person Will; 25.03.2018

Замените это

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

с этим-

new webpack.ContextReplacementPlugin( /(.+)?angular(\\|\/)core(.+)?/, root('./src'), {} )
person DhirendraNk    schedule 12.11.2017
comment
Это работает. Было бы неплохо получить более подробное объяснение того, почему изменение регулярного выражения устраняет эту проблему. - person atconway; 06.03.2018
comment
Это работает для меня, было неприятно видеть предупреждение, спасибо. - person Will; 25.03.2018
comment
кто-нибудь знает, где найти этот код? Я не могу найти код для замены. - person Prem popatia; 25.03.2019
comment
Это работает, потому что вы сообщаете функции System.Import, где найти исходный код в папке node_modules. Путь меняется в зависимости от используемой версии Angular. Команда Angular должна справиться с этим лучше, надеюсь, это уже было сделано. - person Robert Brisita; 18.04.2019

Это предупреждение может быть связано с внедрением пакетов в (зависимости или devDependencies).

Если проблема вдруг появится, проверьте последнюю модификацию в вашем package.json.

Рассмотрите возможность удаления package-lock.json, если вы планируете перезапустить npm install.

person L Y E S - C H I O U K H    schedule 16.04.2020

Я получил это в Angular, когда случайно импортировал EventEmitter из «транспортира». Я обвиняю свою IDE даже в том, что она предложила это!

Он должен быть импортирован из ядра:

import { EventEmitter } from '@angular/core';
person danday74    schedule 27.07.2021