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 相关文章推荐
超级退弹代码
Jul 07 Javascript
js清除input中type等于file的值域(示例代码)
Dec 24 Javascript
javascript正则表达式参数/g与/i及/gi的使用指南
Aug 27 Javascript
jqGrid中文文档之选项设置
Dec 02 Javascript
再谈Javascript中的基本类型和引用类型(推荐)
Jul 01 Javascript
AngularJS递归指令实现Tree View效果示例
Nov 07 Javascript
jQuery插件版本冲突的处理方法分析
Jan 16 Javascript
checkbox:click事件触发span元素内容改变的方法
Sep 11 Javascript
JavaScript实现二叉树的先序、中序及后序遍历方法详解
Oct 26 Javascript
详解vue挂载到dom上会发生什么
Jan 20 Javascript
javascript获取select值的方法完整实例
Jun 20 Javascript
解决layui-open关闭自身窗口的问题
Sep 10 Javascript
浅谈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
php文档更新介绍
2011/07/22 PHP
解析csv数据导入mysql的方法
2013/07/01 PHP
PHP中__autoload和Smarty冲突的简单解决方法
2016/04/08 PHP
PHP mysqli_free_result()与mysqli_fetch_array()函数详解
2016/09/21 PHP
PHP7.1方括号数组符号多值复制及指定键值赋值用法分析
2016/09/26 PHP
Linux服务器下PHPMailer发送邮件失败的问题解决
2017/03/04 PHP
phpmyadmin下载、安装、配置教程
2017/05/16 PHP
Laravel Validator 实现两个或多个字段联合索引唯一
2019/05/08 PHP
不要小看注释掉的JS 引起的安全问题
2008/12/27 Javascript
js触发asp.net的Button的Onclick事件应用
2013/02/02 Javascript
JavaScript File分段上传
2016/03/10 Javascript
简单谈谈关于 npm 5.0 的新坑
2017/06/08 Javascript
运用jQuery写的验证表单(实例讲解)
2017/07/06 jQuery
node.js实现的装饰者模式示例
2017/09/06 Javascript
bootstrap table实现iview固定列的效果实例代码详解
2019/09/30 Javascript
Vue的transition-group与Virtual Dom Diff算法的使用
2019/12/09 Javascript
vue2.0 watch里面的 deep和immediate用法说明
2020/10/30 Javascript
vue实现简易的双向数据绑定
2020/12/29 Vue.js
Vue多选列表组件深入详解
2021/03/02 Vue.js
实例讲解python函数式编程
2014/06/09 Python
Python实现获取操作系统版本信息方法
2015/04/08 Python
Python实现二维数组输出为图片
2018/04/03 Python
Python+PyQt5实现美剧爬虫可视工具的方法
2019/04/25 Python
Python_查看sqlite3表结构,查询语句的示例代码
2019/07/17 Python
nginx搭建基于python的web环境的实现步骤
2020/01/03 Python
基于Django OneToOneField和ForeignKey的区别详解
2020/03/30 Python
HTML5事件方法全部汇总
2016/05/12 HTML / CSS
英国文胸专家:AmpleBosom.com
2018/02/06 全球购物
《郑和远航》教学反思
2014/04/16 职场文书
大学理论知识学习自我鉴定
2014/04/28 职场文书
2015年学校党支部工作总结
2015/04/01 职场文书
2016应届大学生自荐信模板
2016/01/28 职场文书
2019求职信大礼包
2019/05/15 职场文书
导游词之西湖雷峰塔
2019/09/18 职场文书
《攀登者》:“海拔8000米以上,你不能指望任何人”
2019/11/25 职场文书
Android开发EditText禁止输入监听及InputFilter字符过滤
2022/06/10 Java/Android