gpt4 book ai didi

javascript - ReactJS - 是什么让bundle.js 尺寸变大

转载 作者:行者123 更新时间:2023-12-01 00:51:33 25 4
gpt4 key购买 nike

我最近完成了一个关于 ReactJS 的项目,该项目的唯一问题是它的生产bundle.js 大小约为 30MB,这是非常巨大的。我用过BundleAnalyzerPlugin插件来分析它,看起来像这样

enter image description here

block 越大,尺寸越大。

node_modules=10 MB每个可见的小块几乎 = 1MB

我的 webpack 配置如下所示

webpack.base.config.js

var webpack = require('webpack');
const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin;
module.exports = {
entry: [
'./src/index.js'
],
output: {
path: __dirname,
publicPath: '/',
filename: 'bundle.js'
},
noParse:[
'./~/xlsx/jszip.js',
],
externals:[
{'./jszip': 'jszip'}
],
module: {
loaders: [{
test: /\.js$/,
exclude: /node_modules/,
loader: 'babel',
query: {
presets: ['react', 'es2015', 'stage-1']
}
},
{
test: /\.json$/,
loader: "json-loader"
},
{
test: /\.(html)$/,
loader: "html-loader",
options:{
attrs:[':data-src!./src/components/preview/preview_html',':data-src!./src/components/landing/loader/index.html']
}
},
{
test: /\.(ttf|gif|eot|svg|woff|woff2|png)(\?.+)?$/,
loader: 'file-loader?name=[hash:12].[ext]'
},
{
test: /\.css?$/,
loader: 'style-loader!css-loader?modules&importLoaders=1&localIdentName=[name]__[local]___[hash:base64:5]'
},
{
test: /\.scss?$/,
loader: 'style-loader!css-loader!sass-loader'
}]
},
resolve: {
root: __dirname,
alias:{
//Have set of aliases
},
extensions: ['','.json', '.js', '.jsx','.ejs']
},
plugins: [
new webpack.ProvidePlugin({
$: "jquery",
jQuery: "jquery"
}),
new BundleAnalyzerPlugin()
],
devServer: {
historyApiFallback: true,
contentBase: './',
watchContentBase: true,
},
devtool:'cheap-module-eval-source-map'
};

webpack.prod.config.js

const merge = require('webpack-merge');
const baseConfig = require('./webpack.base.config.js');
var webpack = require('webpack');
var CompressionPlugin = require('compression-webpack-plugin');

var HtmlWebpackPlugin = require('html-webpack-plugin');
module.exports = merge(baseConfig,{
plugins: [
new webpack.DefinePlugin({
'process.env': {
'NODE_ENV': JSON.stringify('production')
}
}),
new HtmlWebpackPlugin({
template:'index.ejs',
hash: false,
baseHref: 'xxxx',
scripts: [
{
src: 'bundle.js',
type: 'text/javascript'
}
]
})
]
});

我已经将一些CSS直接从node_modules导入到index.ejs文件中,如下所示

<link rel="stylesheet" href="/node_modules/react-bootstrap-switch/dist/css/bootstrap3/react-bootstrap-switch.css">
<link rel="stylesheet" href="/node_modules/draft-js/dist/Draft.css">
<link rel="stylesheet" href="/node_modules/react-select-plus/dist/react-select-plus.css">
<link rel="stylesheet" href="/node_modules/react-day-picker/lib/style.css">
<link rel="stylesheet" href="/node_modules/react-draft-wysiwyg/dist/react-draft-wysiwyg.css">
<script src="node_modules/xlsx/dist/shim.min.js"></script>
<script src="node_modules/xlsx/dist/xlsx.full.min.js"></script>

需要帮助减小大小,并查找配置或实现中的错误..

谢谢。

最佳答案

我假设您使用的是 webpack 4。我注意到您尚未在生产 webpack 配置中设置 mode: 'product' 。该选项将进行优化,包括使用 terser 来缩小捆绑输出。另外,将 NODE_ENV 设置为 生产,某些库直接依赖于该变量的值。

我建议从这个开始,并阅读以下内容:https://webpack.js.org/guides/production/

完成此操作后,您可以开始识别哪些第三方模块在您的 vendor 包中占据最大大小。然后,您可以考虑对它们进行代码分割,以便它们位于自己单独的 block 中,并且仅在需要时才加载它们。您可以在这里阅读有关代码分割的信息:https://webpack.js.org/guides/code-splitting/

关于javascript - ReactJS - 是什么让bundle.js 尺寸变大,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56928195/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com