之前一直使用create-react-app
这个脚手架进行react
开发,后面由于一些自定义的配置,转而使用webpack
搭建一套本身的脚手架。可是在使用webpack
打包以后发现,纳尼?怎么文件这么大??? 因而研究了一下如何处理webpack
打包以后文件太大的状况,简单记录下来。css
首先,经过指定环境,告诉webpack
咱们当前处于production
环境中,要按照production
的方式去打包。html
//指定环境,将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
。react
安装webpack
插件extract-text-webpack-plugin
。 npm install extract-text-webpack-plugin --save-dev
。 使用方法:webpack
plugins:[ new ExtractTextPlugin('static/css/styles.[contenthash].css'), ] 复制代码
这里使用了contenthash
,webpack
会根据内容去生成hash
值。git
UglifyJSPlugin
压缩。经过UglifyJSPlugin
能够压缩咱们的*.js
文件。 安装方法: npm install uglifyjs-webpack-plugin --save-dev
。 用法: UglifyJSPlugin详细用法github
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
文件进行提取,创建一个独立的文件。这个文件包含一些共用模块,浏这样览器只在刚开始的时候加载一次,便缓存起来供后续使用。而不用每次访问一个新界面时,再去加载一个更大的文件。web
entry:{ app:'./entry', vendor:['react','other-lib'], }, plugins:[ new Webpack.optimize.CommonsChunkPlugin({ name: 'vendor', }), ] 复制代码
咱们使用compression-webpack-plugin
插件进行压缩。 安装:npm install compression-webpack-plugin --save-dev
。 compression-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//只有压缩率比这个值小的资源才会被处理 }) ] 复制代码
压缩结果: npm
添加插件html-webpack-plugin
安装: npm install html-webpack-plugin --save-dev
用法:segmentfault
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' }), ] 复制代码