Webpack DllPlugin 打包后 React 组件报错怎么办?
我用 Webpack 的 DllPlugin 把 react 和 react-dom 打包成 dll 文件,但页面一加载就报错说 React is not defined,明明已经引入了 dll 文件啊?
我的组件代码很简单,就是个基础的函数组件:
import React from 'react';
const App = () => {
return <div>Hello DllPlugin!</div>;
};
export default App;
DllPlugin 配置里也把 react 加进 vendor 了,manifest 也生成了,html 里 script 标签顺序也没问题,但就是运行时报错。是不是哪里漏了什么配置?
问题出在你主项目的 webpack 配置里,需要用 DllReferencePlugin 来"告诉" webpack,react 这个模块已经在 dll 里了,别再打包了,去 manifest 里找映射关系。
你需要在 webpack.config.js 里加上这个配置:
还有个容易漏的地方,DllPlugin 配置的时候,output.library 这个字段必须设置,而且要和 DllReferencePlugin 里的 name 对应上。官方文档明确要求了这个映射关系。
你的 dll 配置应该长这样:
output 也要加上 library:
最后检查一下 html 模板,dll 文件必须在你业务代码的 script 标签之前加载,顺序反了也会报这个错。
配完重新跑一遍 build,应该就搞定了。
在主 webpack.config.js 里加这段:
配上你打包 dll 时生成的 manifest 文件路径,应该能用。