[关闭]
@bornkiller 2017-08-07T15:36:38.000000Z 字数 1447 阅读 2218

webpack优化系列--压缩

webpack


前言

发布上线,优化 webpack2 构建获得更小的文件尺寸,让网页打开速度更快以及简约宽带。

压缩优化

压缩CSS

css-loader 默认没有开启压缩,生成的css文件里有很多空格和tab,通过配置 minimize 参数可以开启压缩输出最小的css,压缩通过 cssnano 实现。

  1. {
  2. loader: 'css-loader',
  3. options: {
  4. root: path.resolve(process.cwd(), 'src'),
  5. minimize: true
  6. }
  7. }

压缩HTML

此步骤可选,部分框架如 React 较少直接与 HTML 文件直接关联,笔者维护内部系统依旧使用 Angularjshtml-loader默认没有开启压缩,配置minimize 参数开启。

  1. {
  2. loader: 'html-loader',
  3. options: {
  4. root: path.resolve(process.cwd(), 'src'),
  5. attrs: ['img:src'],
  6. minimize: true
  7. }
  8. }

压缩图片

  1. const ImageminPlugin = require('imagemin-webpack-plugin').default;
  2. {
  3. plugins: [
  4. new ImageminPlugin({
  5. test: /\.(png|jpe?g|gif|svg)(\?.*)?$/
  6. })
  7. ]
  8. }

压缩JS

  1. const webpack = require('webpack');
  2. {
  3. plugins: [
  4. new webpack.optimize.UglifyJsPlugin({
  5. test: /\.(png|jpe?g|gif|svg)(\?.*)?$/
  6. })
  7. ]
  8. }

环境变量

部分第三库包含辅助性代码,生产环境中剔除。

  1. if(process.env.NODE_ENV !== 'production'){
  2. // None-production code here
  3. }
  1. const webpack = require('webpack');
  2. {
  3. plugins: [
  4. new webpack.DefinePlugin({
  5. 'process.env': {
  6. 'NODE_ENV': JSON.stringify('production')
  7. }
  8. })
  9. ]
  10. }

按需加载

部分第三方库,如 lodash, antd 等,导出大量功能独立的接口,如果完全加载效率太低,所以可进行按需加载。

  1. // Bad
  2. import { Observable, Subject } from 'rxjs';
  3. // Good
  4. import { Observable } from 'rxjs/Observable';
  5. import { Subject } from 'rxjs/Subject';

tree-shaking

第三方库,redux, react-router 等开始支持 tree-shaking。发布代码即包含 es5 的又包含全采用了 es6 import export 语法的代码。webpack tree-shaking 依赖于 uglifyjs 实现,故放入此篇。

  1. {
  2. "main": "lib/index.js",
  3. "jsnext:main": "es/index.js",
  4. }
  1. module.exports = {
  2. resolve: {
  3. mainFields: ['jsnext:main','main'],
  4. }
  5. };

webpack 优先使用 jsnext:main 字段,优化支持 tree-shaking 的库。

优化预览

完全未开启压缩效果如下:

pure.png-248.2kB

开启上述压缩结果如下:

minimize-last.png-255.1kB

Contact

Email: hjj491229492@hotmail.com

qrcode_for_gh_d8efb59259e2_344.jpg-8.7kB

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注