我试图在一个文件中要求一个模块,只有当该模块实际可用时才会使用该模块。所以这个模块是完全可选的。此代码将作为第 3 方库的一部分分发。问题是如果我使用 import
,任何使用 webpack 的用户都会看到他们的构建失败,所以我最终使用:
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
编辑2:
基于 webpack instruction做动态导入,我也试过:
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
最佳答案
好像this is a common issue在网络包中。根据configuration docs ,您可以在 webpack.config.js
中使用标志 module: { exprContextCritical: false }
来在您的项目中全局抑制此警告,尽管该标志被认为已弃用并且您可能会在 issue I linked 中找到更多强烈推荐的解决方案.
关于javascript - 尝试要求未安装但不是必需的模块时发出警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51131954/