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 相关文章推荐
jquery 批量上传图片实现代码
Jan 28 Javascript
javascript 图片上一张下一张链接效果代码
Mar 12 Javascript
jQuery简单图表peity.js使用示例
May 02 Javascript
jQuery select表单提交省市区城市三级联动核心代码
Jun 09 Javascript
js判断文本框剩余可输入字数的方法
Feb 04 Javascript
深入理解JavaScript系列(27):设计模式之建造者模式详解
Mar 03 Javascript
jQuery+ajax简单实现文件上传的方法
Jun 03 Javascript
js原生方法被覆盖,从新赋值原生的方法
Jan 02 Javascript
微信小程序input框中加入小图标的实现方法
Jun 19 Javascript
微信小程序有旋转动画效果的音乐组件实例代码
Aug 22 Javascript
使用layui定义一个模块并使用的例子
Sep 14 Javascript
详解JVM系列之内存模型
Jun 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
Codeigniter框架实现获取分页数据和总条数的方法
2014/12/05 PHP
php图片上传类 附调用方法
2016/05/15 PHP
Js中sort()方法的用法
2006/11/04 Javascript
Mozilla 表达式 __noSuchMethod__
2009/04/05 Javascript
Jquery ajax传递复杂参数给WebService的实现代码
2011/08/08 Javascript
理解javascript中try...catch...finally
2015/12/25 Javascript
解析浏览器端的AJAX缓存机制
2016/06/21 Javascript
javascirpt实现2个iframe之间传值的方法
2016/06/30 Javascript
浅谈Angular中ngModel的$render
2016/10/24 Javascript
jQuery实现对象转为url参数的方法
2017/01/11 Javascript
jQuery插件echarts实现的去掉X轴、Y轴和网格线效果示例【附demo源码下载】
2017/03/04 Javascript
vue中v-model动态生成的实例详解
2017/10/27 Javascript
Thinkjs3新手入门之如何使用静态资源目录
2017/12/06 Javascript
JavaScript中var、let、const区别浅析
2018/06/24 Javascript
跨域解决之JSONP和CORS的详细介绍
2018/11/21 Javascript
vue input实现点击按钮文字增删功能示例
2019/01/29 Javascript
微信小程序新手教程之启动页的重要性
2019/03/03 Javascript
Node使用Nodemailer发送邮件的方法实现
2020/02/24 Javascript
jQuery+ajax实现用户登录验证
2020/09/13 jQuery
你不知道的SpringBoot与Vue部署解决方案
2020/11/09 Javascript
Vue ​v-model相关知识总结
2021/01/28 Vue.js
Python本地与全局命名空间用法实例
2015/06/16 Python
wxpython中自定义事件的实现与使用方法分析
2016/07/21 Python
python制作小说爬虫实录
2017/08/14 Python
详解django中使用定时任务的方法
2018/09/27 Python
在交互式环境中执行Python程序过程详解
2019/07/12 Python
基于Python新建用户并产生随机密码过程解析
2019/10/08 Python
python数据库开发之MongoDB安装及Python3操作MongoDB数据库详细方法与实例
2020/03/18 Python
Python selenium自动化测试模型图解
2020/04/15 Python
PyCharm2020最新激活码+激活码补丁(亲测最新版PyCharm2020.2激活成功)
2020/11/25 Python
校园歌咏比赛主持词
2014/03/18 职场文书
《赠汪伦》教学反思
2014/04/12 职场文书
委托书怎么写
2014/07/31 职场文书
年度考核表个人总结
2015/03/06 职场文书
2015年食品安全宣传周活动总结
2015/07/09 职场文书
SQLServer常见数学函数梳理总结
2022/08/05 MySQL