webpack - webpack v5 忽略供应商 dll
问题描述
我现在正忙于升级我们所有的 JS 堆栈的痛苦任务。我更新了每个库,除了一个:导致一堆问题的 webpack v5。我不能真正发布我所有的 webpack 配置,它是一个复杂而大的项目。我遇到的问题与此错误有关:
你不应该使用<withRouter(withReducer(EpicInjector)) /> outside a <Router>
. 我用一个简单的<Switch><Route>
... 替换来简化代码,但同样的错误是在几乎没有启动根 app.js 时出现:
const render = (messages, appComp) => {
ReactDOM.render(
<Provider store={store}>
<ConnectedRouter history={history}>
<CookiesProvider>
<Switch>
<Route><div>hello</div></Route>
</Switch>
</CookiesProvider>
</ConfigProvider>
</Provider>,
MOUNT_NODE,
);
};
当您搜索它时,它看起来很明显,但请记住,一切都与 webpack v4 完美配合。它逐渐减少到拥有 2 个实例或 react-router,但我认为它不止于此。当使用 webpack-bundle-analyzer 查看我的包时,我看到我的供应商包几乎相同,这是个好消息。但是当查看我的应用程序包时,它有很大的不同。首先,webpack v4 创建了一个大约 12mb 的 0.chunk.js(我在 dev 中)以及一个 6mb 的 app.js。当我检查引用时,所有 react-router ref 都在我的供应商 dll.js 中,这正是我想要的。在 webpack v5 上,我得到了 11mb 的 app.js 和一个名为:vendors-node_modules_formatjs_intl-pluralrules_locale-data_en_js-node_modules_formatjs_intl-p-638766.chunk.js 的 15mb 的丑陋块(哇,这真是丑陋得要命)。没有对供应商 dll 的引用。js 除了在分析器中提到 21k 之外(如果我查看生成的文件,它应该至少为 30mb)所以这就是正在发生的事情。它完全忽略了供应商。
Webpack 配置几乎相同,除了:
optimization: {
moduleIds: 'named',
emitOnErrors: false,
},
和节点 fs: 'empty 被替换为:
fallback: {
fs: false,
crypto: require.resolve("crypto-browserify"),
path: require.resolve("path-browserify"),
vm: require.resolve("vm-browserify"),
},
其他是配置中非常小的细节。我像以前一样使用 webpack.DllConfig 和 DllReferencePlugin(它并没有真正改变我读到的内容)。它生成 dll 清单,供应商约为。和以前一样,但是即使参考插件指向它,主构建也会完全忽略它。因此,当我在浏览器中加载所有内容时,它正在加载我的供应商、块和应用程序,并且响应路由器发出了繁荣的抱怨(这不怪我,我有多个 react-router 实例!)。
我正在搜索,可能出了什么问题并尝试了所有可能的 webpack 选项,但在很长一段时间后仍然卡住了,需要一些帮助。
谢谢一堆。
解决方案
推荐阅读
- fortran - Fortran。下面哪个代码是正确的?
- ios - iOS本地化中es和es-419有什么区别?
- php - 使用该特定特征访问类的特征中的类名
- php - 404 到明年的问题 - php calendar
- python - 填充 groupby 对象的序列,Pandas
- vba - 尝试在 Array 的特定行上输入数据
- c# - DocuSign API - UpdateTabs 未在文档中设置值
- sql-server - 基于 ID 值,如何在表中找到具有 ID 值的列?
- vbscript - 修改后使用 VBScript 将文件保存到另一个文件中
- ajax - Laravel - 尝试根据用户 ID 显示谷歌地图