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 相关文章推荐
表单项的name命名为submit、reset引起的问题
Dec 22 Javascript
详解new function(){}和function(){}() 区别分析
Mar 22 Javascript
JavaScript 学习笔记(五)
Dec 31 Javascript
JS清除IE浏览器缓存的方法
Jul 26 Javascript
正则表达式,替换所有HTML标签的简单实例
Nov 28 Javascript
JS中append字符串包含onclick无效传递参数失败的解决方案
Dec 26 Javascript
基于Bootstrap实现城市三级联动
Nov 23 Javascript
swiper移动端轮播插件(触碰图片之后停止轮播)
Dec 28 Javascript
基于vue打包后字体和图片资源失效问题的解决方法
Mar 06 Javascript
JavaScript 日期时间选择器一些小结
Apr 02 Javascript
三分钟学会用ES7中的Async/Await进行异步编程
Jun 14 Javascript
Vue跨域请求问题解决方案过程解析
Aug 07 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读取RSS feed的代码
2008/08/01 PHP
PHP入门教程之正则表达式基本用法实例详解(正则匹配,搜索,分割等)
2016/09/11 PHP
PHP中仿制 ecshop验证码实例
2017/01/06 PHP
PHP实现Unicode编码相互转换的方法示例
2020/11/17 PHP
Laravel 5.4.36中session没有保存成功问题的解决
2018/02/19 PHP
jQuery的显示和隐藏方法与css隐藏的样式对比
2013/10/18 Javascript
JQuery入门基础小实例(1)
2015/09/17 Javascript
jQuery实现简易的天天爱消除小游戏
2015/10/16 Javascript
JS表格组件BootstrapTable行内编辑解决方案x-editable
2016/09/01 Javascript
dul无法加载bootstrap实现unload table/user恢复
2016/09/29 Javascript
3分钟掌握常用的JS操作JSON方法总结
2017/04/25 Javascript
JS库之wow.js使用方法
2017/09/14 Javascript
老生常谈JavaScript面向对象基础与this指向问题
2017/10/16 Javascript
在 webpack 中使用 ECharts的实例详解
2018/02/05 Javascript
vue实现动态显示与隐藏底部导航的方法分析
2019/02/11 Javascript
解决vue项目F5刷新mounted里的函数不执行问题
2019/11/05 Javascript
js实现经典贪吃蛇小游戏
2020/03/19 Javascript
[01:53]DOTA2超级联赛专访Zhou 五年职业青春成长
2013/05/29 DOTA
Python操作RabbitMQ服务器实现消息队列的路由功能
2016/06/29 Python
django实现前后台交互实例
2017/08/07 Python
Python实现插入排序和选择排序的方法
2019/05/12 Python
Python将主机名转换为IP地址的方法
2019/08/14 Python
pycharm中使用request和Pytest进行接口测试的方法
2020/07/31 Python
利用python进行文件操作
2020/12/04 Python
美国波西米亚风格服装品牌:Show Me Your Mumu
2018/01/05 全球购物
俄罗斯最大的灯具网站:Fandeco
2020/03/14 全球购物
init进程的作用
2015/08/20 面试题
shell变量的作用空间是什么
2013/08/17 面试题
大学生入党思想汇报
2014/01/14 职场文书
旅游节目策划方案
2014/05/26 职场文书
2016元旦文艺汇演主持词
2015/07/06 职场文书
2016年共产党员个人承诺书
2016/03/24 职场文书
为什么不建议在go项目中使用init()
2021/04/12 Golang
OpenCV绘制圆端矩形的示例代码
2021/08/30 Python
Golang 1.18 多模块Multi-Module工作区模式的新特性
2022/04/11 Golang