浏览器从服务器访问网页时获取的JavaScript,css资源都是文本形式的,文件越大网页加载时间越长。 为了提高网页加速速度和减小网络传输流量, 能够对这些资源进行压缩。 压缩的方法除了能够经过GIZP算法对文件压缩外,还能够对文本自己压缩。css
对文本自己进行压缩的做用除了有提高网页加载速度的优点外, 还具备混淆代码的做用。 因为压缩后的代码可读性很是差, 就算别人下载到网页的代码,也大大增长了代码分析和改造的难度。html
目前最成熟的JavaScript压缩工具就是UglifyJS, 它会分析JavaScript的代码语法树, 理解代码含义, 从而能作到诸如去掉无效代码,去掉日志输出代码,缩短变量名等优化。webpack
要在webpack中接入UglifyJS须要经过插件的形式,目前有两个成熟的插件,分别是:web
UglifyJsPlugin: 经过封装UglifyJS实现压缩。 ParalleUglifyPlugin: 多进程并行处理压缩
UglifyJS提供了很是多的选择用于配置在压缩过程当中采用哪些规则,咱们挑出一些经常使用的拿出来详细讲解一下算法
也就是说,在不影响代码正确执行的前提下,最优化的代码压缩配置为以下:浏览器
const UglifyJSPlugin = require('webpack/lib/optimize/UglifyJsPlugin'); module.exports = { plugins: [ // 压缩输出的 JS 代码 new UglifyJSPlugin({ compress: { // 在UglifyJs删除没有用到的代码时不输出警告 warnings: false, // 删除全部的 `console` 语句,能够兼容ie浏览器 drop_console: true, // 内嵌定义了可是只用到一次的变量 collapse_vars: true, // 提取出出现屡次可是没有定义成变量去引用的静态值 reduce_vars: true, }, output: { // 最紧凑的输出 beautify: false, // 删除全部的注释 comments: false, } }), ], };
CSS代码也能够像JavaScript那样被压缩,目前比较成熟的css压缩工具备cssnano,基于PostCSS.服务器
cssnano能理解css代码的含义,而不单单是删除空格。网络
把cssnano接入到webpack中也很简单,由于css-loader已经将其内置了,要开启cssnan去压缩代码只须要开启css-loader的minimize选项。工具
const path = require('path'); const {WebPlugin} = require('web-webpack-plugin'); const ExtractTextPlugin = require('extract-text-webpack-plugin'); module.exports = { module: { rules: [ { test: /\.css/,// 增长对 CSS 文件的支持 // 提取出 Chunk 中的 CSS 代码到单独的文件中 use: ExtractTextPlugin.extract({ // 经过 minimize 选项压缩 CSS 代码 use: ['css-loader?minimize'] }), }, ] }, plugins: [ // 用 WebPlugin 生成对应的 HTML 文件 new WebPlugin({ template: './template.html', // HTML 模版文件所在的文件路径 filename: 'index.html' // 输出的 HTML 的文件名称 }), new ExtractTextPlugin({ filename: `[name]_[contenthash:8].css`,// 给输出的 CSS 文件名称加上 Hash 值 }), ], };