【发布时间】:2018-12-10 10:22:53
【问题描述】:
我试图在一个文件中要求一个模块,该模块仅在该模块实际可用时才使用。所以该模块是完全可选的。此代码将作为第 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,在您的第一次尝试中使用
try/catch将成功地将其捆绑为可选导入 -
因为它应该是第三方库的一部分。用不必要的警告来污染用户并不是很酷……
-
@Sharcoux 你想出了什么解决方案?
-
据我所知,我只是发出警告。
标签: javascript webpack require