Предупреждение при попытке запросить модуль, который не установлен, но не нужен - PullRequest
0 голосов
/ 02 июля 2018

Я пытаюсь запросить модуль в файле, который будет использоваться только в том случае, если этот модуль действительно доступен. Таким образом, модуль является полностью необязательным. Этот код будет распространяться как часть сторонней библиотеки. Проблема в том, что любой пользователь, использующий веб-пакет, увидит, что его сборка не удастся, если я использую import, поэтому я в итоге использовал:

let webrtc = {};
try {
  webrtc = require('my-optional-module');
} catch (err) {}

Но даже с этим кодом они получат предупреждение о проектах, которые не нуждаются в этом дополнительном модуле:

[WEB] WARNING in ./node_modules/xxx
[WEB] Module not found: Error: Can't resolve 'my-optional-module' in '/Users/xxx/node_modules/xxx'

Редактировать: Используя ответ ниже

let webrtc = {};
if(require.resolve('my-optional-module')) {
  webrtc = require('my-optional-module');
}

Но я получаю это предупреждение:

Critical dependency: the request of a dependency is an expression

И эта ошибка:

Module not found: Error: Can't resolve 'my-optional-module' in xxx

Edit2:

На основе инструкции веб-пакета для выполнения динамического импорта я также попытался:

var webrtc = {};
require.ensure(['my-optional-module'], function (require) {
  return webrtc = require('my-optional-module');
});

Но я все еще получаю:

Module not found: Error: Can't resolve 'my-optional-module' in xxx

1 Ответ

0 голосов
/ 02 июля 2018

Кажется, что это обычная проблема в веб-пакете. Согласно документации , вы можете использовать флаг module: { exprContextCritical: false } в вашем webpack.config.js, чтобы подавить это предупреждение глобально во всем проекте, хотя этот флаг считается устаревшим, и вы можете найти более рекомендуемые решения в проблема, с которой я связался .

...