webpack - Webpack 外部可选模块
问题描述
我正在研究一个需要一些可选对等依赖项的库。
"peerDependencies": {
"react-dnd": ">=14.0.0",
"react-dnd-html5-backend": ">=14.0.0",
},
"peerDependenciesMeta": {
"react-dnd": {
"optional": true
},
"react-dnd-html5-backend": {
"optional": true
}
},
我认为我可能需要它们的方式是
try {
DndProvider = require('react-dnd').DndProvider;
HTML5Backend = require('react-dnd-html5-backend').HTML5Backend;
} catch (err) {
// optional module not installed
}
我将它们声明为外部对象,如下所示:
externals: {
"react-dnd": {
commonjs2: 'react-dnd',
commonjs: 'react-dnd',
amd: 'react-dnd',
root: 'react-dnd',
},
"react-dnd-html5-backend": {
commonjs2: 'react-dnd-html5-backend',
commonjs: 'react-dnd-html5-backend',
amd: 'react-dnd-html5-backend',
root: 'react-dnd',
},
}
现在,这可行,但如果强制消费者安装依赖项,否则他们将收到一条compiled with warnings
Module not found: Error: Can't resolve 'react-dnd'
消息
我如何告诉 webpack 不在乎模块是否不存在?
我发现一种方法是使用,但在这里__non_webpack_require__
阅读答案后我感到气馁
解决方案
我认为您正在寻找的东西是不可能的。如果缺少导入的模块,webpack 将始终失败。
为了避免在不使用的情况下将 DnD 库发送到客户端,您可以使用动态导入来导入它,以防满足某些条件:
const dnd = await import('react-dnd')
另一种选择是创建带有或不带有依赖项的单独插件。
推荐阅读
- c - 如何在 Linux 上的 C 中查找目录及其子目录中的文件?
- c# - 在 swagger 上渲染时忽略 [FromForm] 数据
- elasticsearch - Sulu,尝试保存页面/帖子时出现奇怪的哈希相关错误?
- javascript - 包含字符串索引的数组
- javascript - 检查 iframe 是否完全加载
- r - 我在 rstudio 中收到 rmarkdown 控制台错误
- admob - 无法将 AdMob 应用链接到我的 App Store 应用
- reactjs - 在对话框中显示图表
- masstransit - 将 MessageData 与 InMemoryTestHarness 一起使用
- node.js - 在 SPA 上显示已安装的节点版本