webpack打包之后的文件过大的解决方法

以前一直使用create-react-app这个脚手架进行react开发,后面因为一些自定义的配置,转而使用webpack搭建一套自己的脚手架。但是在使用webpack打包之后发现,纳尼?怎么文件这么大??? 于是研究了一下如何处理webpack打包之后文件太大的情况,简单记录下来。

首先配置全局变量

首先,通过指定环境,告诉webpack我们当前处于production环境中,要按照production的方式去打包。

 //指定环境,将process.env.NODE_ENV环境与library关联
 new Webpack.DefinePlugin({
	'process.env.NODE_ENV': JSON.stringify('production'),
 }),
复制代码

优化devtool中的source-map.

dev-tool提供了很多种选项,用来增强我们debug的能力,我们熟知的有:source-map,inline-source-map,cheap-source-map等等。详细的用法可以参考 Devtool官方文档Devtool配置对比webpack sourcemap 选项多种模式的一些解释, https://webpack.github.io/docs/configuration.html#devtool 如果你的文件在打包之后突然变成好几M,那么不用想,肯定是因为source-map的原因。source-map在开发阶段确实很好用,调试起来很方便,但是在生产环境下就没必要部署了。 建议在prod环境下关闭source-map

剥离css文件,单独打包

安装webpack插件extract-text-webpack-pluginnpm install extract-text-webpack-plugin --save-dev。 使用方法:

plugins:[
 new ExtractTextPlugin('static/css/styles.[contenthash].css'),
]
复制代码

这里使用了contenthashwebpack会根据内容去生成hash值。

使用UglifyJSPlugin压缩。

通过UglifyJSPlugin可以压缩我们的*.js文件。 安装方法: npm install uglifyjs-webpack-plugin --save-dev。 用法: UglifyJSPlugin详细用法

const UglifyJsPlugin = require('uglifyjs-webpack-plugin')
module.exports = {
  plugins: [
     new UglifyJSPlugin({
            parallel: 4,
            uglifyOptions: {
                output: {
                    comments: false,
                    beautify: false,
                },
                compress: {
                    warnings: false
                },
            },
            cache: true,
        }),
  ]
}
复制代码

提取公共依赖

使用CommonsChunkPlugin插件,将多个js文件进行提取,建立一个独立的文件。这个文件包含一些共用模块,浏这样览器只在刚开始的时候加载一次,便缓存起来供后续使用。而不用每次访问一个新界面时,再去加载一个更大的文件。

 entry:{
	app:'./entry',
	vendor:['react','other-lib'],
 },
 plugins:[
	 new Webpack.optimize.CommonsChunkPlugin({
	     name: 'vendor',
	 }),
 ]
复制代码

开启gzip压缩

我们使用compression-webpack-plugin插件进行压缩。 安装:npm install compression-webpack-plugin --save-devcompression-webpack-plugin 详细用法 使用:

const CompressionPlugin = require("compression-webpack-plugin");
plugins:[
new CompressionPlugin({
	 asset: '[path].gz[query]', //目标资源名称。[file] 会被替换成原资源。[path] 会被替换成原资源路径,[query] 替换成原查询字符串
     algorithm: 'gzip',//算法
     test: new RegExp(
          '\\.(js|css)$'    //压缩 js 与 css
     ),
     threshold: 10240,//只处理比这个值大的资源。按字节计算
     minRatio: 0.8//只有压缩率比这个值小的资源才会被处理
})
]
复制代码

压缩结果:

这里写图片描述

 

 

 

这里写图片描述

 

 

开启html压缩,自动添加上面生成的静态资源

添加插件html-webpack-plugin 安装: npm install html-webpack-plugin --save-dev 用法:

plugins:[
  new HtmlWebpackPlugin({
      title: '',
         template: __dirname + '/../public/index.html',
         minify: {
             removeComments: true,
             collapseWhitespace: true,
             removeRedundantAttributes: true,
             useShortDoctype: true,
             removeEmptyAttributes: true,
             removeStyleLinkTypeAttributes: true,
             keepClosingSlash: true,
             minifyJS: true,
             minifyCSS: true,
             minifyURLs: true,
         },
         chunksSortMode:'dependency'
     }),
]

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
如果在 Webpack 打包后的 `index.html` 页面中暴露了 IP 地址,可能是因为在项目配置中使用了错误的配置或插件。为了修复这个问题,你可以尝试以下几个方法: 1. 使用 HtmlWebpackPlugin 插件:在 Webpack 配置文件中,确保你使用了 HtmlWebpackPlugin 插件,并配置了正确的选项。在 `plugins` 部分中添加以下代码: ```javascript const HtmlWebpackPlugin = require('html-webpack-plugin'); module.exports = { // ... plugins: [ new HtmlWebpackPlugin({ // 设置生成的 HTML 文件中的标题、模板和文件名等选项 }), ], // ... }; ``` 请确保正确设置了 `title`、`template` 和 `filename` 等选项,以避免暴露 IP 地址。 2. 检查 publicPath 配置:在 Webpack 配置文件中,检查 `output` 部分的 `publicPath` 配置。确保将其设置为合适的值,以避免暴露 IP 地址。例如,将其设置为 `/` 或相对路径。 ```javascript module.exports = { output: { // ... publicPath: '/', }, // ... }; ``` 3. 使用 devServer 配置:如果你正在使用 Webpack Dev Server 进行开发,确保在配置文件中正确设置了 `devServer` 部分。检查是否使用了 `public` 或 `host` 等选项,并将其设置为适当的值。 ```javascript module.exports = { // ... devServer: { // ... public: 'your-domain.com', // or // host: 'your-domain.com', // ... }, // ... }; ``` 确保将 `your-domain.com` 替换为你正确的域名或 IP 地址。 4. 检查其他配置项:检查 Webpack 配置文件中的其他可能影响 `index.html` 页面的配置项,例如 `mode`、`optimization` 等。确保这些配置项不会暴露 IP 地址。 如果尝试了以上方法后问题仍未解决,建议仔细检查你的 Webpack 配置文件和相关依赖,确保没有其他错误导致 IP 地址暴露在生成的 `index.html` 页面中。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值