webpack 打包压缩js和css的方法示例


Posted in Javascript onMarch 20, 2018

打包压缩js与css

由于webpack本身集成了UglifyJS插件(webpack.optimize.UglifyJsPlugin)来完成对JS与CSS的压缩混淆,无需引用额外的插件,

其命令 webpack -p 即表示调用UglifyJS来压缩代码,还有不少webpack插件如 html-webpack-plugin 也会默认使用UglifyJS。

uglify-js的发行版本只支持ES5,如果你要压缩ES6+代码请使用开发分支。

UglifyJS可用的选项有:

parse       解释

compress    压缩

mangle      混淆

beautify    美化

minify      最小化//在插件HtmlWebpackPlugin中使用

CLI         命令行工具

sourcemap   编译后代码对源码的映射,用于网页调试

AST         抽象语法树

name        名字,包括变量名、函数名、属性名

toplevel    顶层作用域

unreachable 不可达代码

option      选项

STDIN       标准输入,指在命令行中直接输入

STDOUT      标准输出

STDERR      标准错误输出

side effects函数副作用,即函数除了返回外还产生别的作用,比如改了全局变量

列一份配置:

//使用插件html-webpack-plugin打包合并html
//使用插件extract-text-webpack-plugin打包独立的css
//使用UglifyJsPlugin压缩代码
var HtmlWebpackPlugin = require('html-webpack-plugin');
var ExtractTextPlugin = require('extract-text-webpack-plugin');
var webpack = require("webpack");
module.exports = {
  entry: {
    bundle : './src/js/main.js'
  },
  output: {
    filename: "[name]-[hash].js",
    path: __dirname + '/dist'
  },
  module: {
    rules: [
      {
        test: /\.css$/,
        use: ExtractTextPlugin.extract({
          fallback: "style-loader",
          use: "css-loader"
        })

      },
      {
        test: /\.(png|jpg|jpeg|gif)$/,
        use: 'url-loader?limit=8192'
      }
    ]
  },
  resolve:{
      extensions:['.js','.css','.json'] //用于配置程序可以自行补全哪些文件后缀
  },

  plugins:[
    new HtmlWebpackPlugin({
      title: 'hello webpack',
      template:'src/component/index.html',
      inject:'body',
      minify:{ //压缩HTML文件
         removeComments:true,  //移除HTML中的注释
         collapseWhitespace:true  //删除空白符与换行符
       }
    }),
    new ExtractTextPlugin("[name].[hash].css"),
    new webpack.optimize.UglifyJsPlugin({
      compress: {   //压缩代码
        dead_code: true,  //移除没被引用的代码
        warnings: false,   //当删除没有用处的代码时,显示警告
        loops: true //当do、while 、 for循环的判断条件可以确定是,对其进行优化
      },
      except: ['$super', '$', 'exports', 'require']  //混淆,并排除关键字
    })
  ]
};

这里需要注意的是压缩的时候需要排除一些关键字,不能混淆,比如$或者require,如果混淆的话就会影响到代码的正常运行。

列几个压缩时常有的属性:

  1. dead_code -- 移除没被引用的代码
  2. loops -- 当 do 、 while 、 for 循环的判断条件可以确定是,对其进行优化。
  3. warnings -- 当删除没有用处的代码时,显示警告

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
自写简单JS判断是否已经弹出页面
Oct 20 Javascript
js获取RadioButtonList的Value/Text及选中值等信息实现代码
Mar 05 Javascript
基于pthread_create,readlink,getpid等函数的学习与总结
Jul 17 Javascript
JS实现文件动态顺序载入的方法
Mar 07 Javascript
vue.js轮播图组件使用方法详解
Jul 03 Javascript
基于three.js实现的3D粒子动效实例代码
Apr 09 Javascript
原生js实现抽奖小游戏
Jun 27 Javascript
layui实现左侧菜单点击右侧内容区显示
Jul 26 Javascript
Javascript中的this,bind和that使用实例
Dec 05 Javascript
详细分析vue响应式原理
Jun 22 Javascript
如何在vue中使用百度地图添加自定义覆盖物(水波纹)
Nov 03 Javascript
详解Vue的七种传值方式
Feb 08 Vue.js
浅谈Node 调试工具入门教程
Mar 20 #Javascript
使用Vue.js开发微信小程序开源框架mpvue解析
Mar 20 #Javascript
浅谈jquery fullpage 插件增加头部和版权的方法
Mar 20 #jQuery
关于vue面试题汇总
Mar 20 #Javascript
vue init webpack myproject构建项目 ip不能访问的解决方法
Mar 20 #Javascript
快速解决vue-cli不能初始化webpack模板的问题
Mar 20 #Javascript
解决vue-cli + webpack 新建项目出错的问题
Mar 20 #Javascript
You might like
实现 win2003 下 mysql 数据库每天自动备份
2006/12/06 PHP
CentOS 安装 PHP5.5+Redis+XDebug+Nginx+MySQL全纪录
2015/03/25 PHP
php把时间戳转换成多少时间之前函数的实例
2016/11/16 PHP
JSQL SQLProxy 的 php 版本代码
2010/05/05 Javascript
理解Javascript_09_Function与Object
2010/10/16 Javascript
基于jQuery的烟花效果(运动相关)点击屏幕出烟花
2012/06/14 Javascript
运算符&&的三个不同层次
2013/04/07 Javascript
jQuery数据缓存功能的实现思路及简单模拟
2013/05/27 Javascript
根据身份证号自动输出相关信息(籍贯,出身日期,性别)
2013/11/15 Javascript
js data日期初始化的5种方法
2013/12/29 Javascript
javascript实现获取浏览器版本、操作系统类型
2015/01/29 Javascript
jQuery中noconflict函数的实现原理分解
2015/02/03 Javascript
JS实现支持多选的遍历下拉列表代码
2015/08/20 Javascript
学习JavaScript鼠标响应事件
2015/12/25 Javascript
JavaScript简单验证表单空值及邮箱格式的方法
2017/01/20 Javascript
详解Vue学习笔记入门篇之组件的内容分发(slot)
2017/07/17 Javascript
基于jquery实现彩色投票进度条代码解析
2020/08/26 jQuery
Chrome插件开发系列一:弹窗终结者开发实战
2020/10/02 Javascript
go和python调用其它程序并得到程序输出
2014/02/10 Python
详解Python如何生成词云的方法
2018/06/01 Python
python 随机生成10位数密码的实现代码
2019/06/27 Python
基于梯度爆炸的解决方法:clip gradient
2020/02/04 Python
详解python中GPU版本的opencv常用方法介绍
2020/07/24 Python
python+requests接口自动化框架的实现
2020/08/31 Python
canvas使用注意点总结
2013/07/19 HTML / CSS
英国著名的茶叶品牌:Whittard of Chelsea
2016/09/22 全球购物
美国眼镜网:GlassesUSA
2017/09/07 全球购物
在浏览器端如何得到服务器端响应的XML数据
2012/11/24 面试题
SOA面试题:如何在SOA中实现松耦合
2013/07/21 面试题
消防标语大全
2014/06/07 职场文书
党的群众路线教育实践活动个人整改落实情况汇报
2014/10/28 职场文书
2015年体育教学工作总结
2015/05/20 职场文书
商标侵权律师函
2015/05/27 职场文书
读《人生的智慧》有感:闲暇是人生的精华
2019/12/25 职场文书
python获取淘宝服务器时间的代码示例
2021/04/22 Python
Java存储没有重复元素的数组
2022/04/29 Java/Android