我正在构建一个反应应用程序并使用 webpack 来捆绑资产。我还拆分了所有 node_module 包,这样文件大小就不会膨胀。
目标是减少网络请求并减少包大小,所以我认为将 jsx 和 js 代码预转换为 commonjs 模块在服务器端使用 babel 是理想的,这样 babel 将不再需要发送到浏览器
到目前为止,这是我在 webpack 配置文件中的 optimization.splitChunks 代码。如果有什么解释不清楚,我是 webpack 和 babel 的新手,请原谅。
splitChunks: {
name: 'components',
cacheGroups: {
vendor: {
test: /[\\/]node_modules[\\/]/,
name(module) {
const name = module.context.match(/node_modules[\\/](.*?)([\\/]|$)/)[1];
return `${name.replace('@', '')}`;
},
filename: 'vendor/[name].js',
},
template: {
test: /[\\/]template[\\/]/,
name: 'template',
},
},
},
然后这是我在查看 chrome devtool 元素选项卡时得到的结果
// rendered in DOM document.body
<script async="" data-chunk="main" src="/static/js/runtime.a5cbbe54.js"></script>
<script async="" data-chunk="main" src="/static/js/main.4107eaec.js"></script>
<script async="" data-chunk="Home" src="/vendor/react-icons.js"></script>
<script async="" data-chunk="Home" src="/static/js/template.7880c2a3.js"></script>
// Is there a way to exclude babel here ? while preserving the functionality of react components ?
<script async="" data-chunk="Home" src="/vendor/babel.js"></script>
<script async="" data-chunk="Home" src="/static/js/components.1dba9c56.js"></script>
<script async="" data-chunk="Home" src="/static/js/Home.503ffd56.js"></script>