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 相关文章推荐
通过下拉框的值来确定输入框是否可以为空的代码
Oct 18 Javascript
基于jquery的文本框与autocomplete结合使用(asp.net+json)
May 30 Javascript
javascript内存管理详细解析
Nov 11 Javascript
Jquery插件实现点击获取验证码后60秒内禁止重新获取
Mar 13 Javascript
jQuery实现为图片添加镜头放大效果的方法
Jun 25 Javascript
jQuery拖拽排序插件制作拖拽排序效果(附源码下载)
Feb 23 Javascript
form表单转Json提交的方法(推荐)
Sep 23 Javascript
JS创建Tag标签的方法详解
Jun 09 Javascript
分分钟学会vue中vuex的应用(入门教程)
Sep 14 Javascript
vue实现element-ui对话框可拖拽功能
Aug 17 Javascript
JS+HTML5 canvas绘制验证码示例
Dec 05 Javascript
vue多次循环操作示例
Feb 08 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中intval()等int转换时的意外异常情况
2013/06/21 PHP
php下载远程大文件(获取远程文件大小)的实例
2017/06/17 PHP
禁止F5等快捷键的JS代码
2007/03/06 Javascript
jQuery 通过事件委派一次绑定多种事件,以减少事件冗余
2010/06/30 Javascript
菜鸟javascript基础资料整理2
2010/12/06 Javascript
textarea中的手动换行处理的jquery代码
2011/02/26 Javascript
十个迅速提升JQuery性能让你的JQuery跑得更快
2012/12/10 Javascript
Ext JS添加子组件的误区探讨
2013/06/28 Javascript
Jquery多选框互相内容交换的实例代码
2013/07/04 Javascript
js获取当前页面路径示例讲解
2014/01/08 Javascript
jQuery EasyUI 菜单与按钮之创建简单的菜单和链接按钮
2015/11/18 Javascript
jQuery插件实现表格隔行变色及鼠标滑过高亮显示效果代码
2016/02/25 Javascript
浅析script标签中的defer与async属性
2016/11/30 Javascript
jquery仿ps颜色拾取功能
2017/03/08 Javascript
微信小程序 向左滑动删除功能的实现
2017/03/10 Javascript
vue数据双向绑定的注意点
2017/06/23 Javascript
详解angular部署到iis出现404解决方案
2018/08/14 Javascript
原生js检测页面加载完毕的实例
2018/09/11 Javascript
[03:09]显微镜下的DOTA2第一期——带你走进华丽的DOTA2世界
2014/06/20 DOTA
从零学python系列之数据处理编程实例(一)
2014/05/22 Python
Python 基础教程之str和repr的详解
2017/08/20 Python
Python爬虫常用小技巧之设置代理IP
2018/09/13 Python
使用django的ORM框架按月统计近一年内的数据方法
2019/07/18 Python
python科学计算之narray对象用法
2019/11/25 Python
pytorch绘制并显示loss曲线和acc曲线,LeNet5识别图像准确率
2020/01/02 Python
Python3基于plotly模块保存图片表格
2020/08/03 Python
Melissa鞋英国官方网站:Nonnon
2019/05/01 全球购物
幼儿园大班毕业感言
2014/02/06 职场文书
实习生岗位职责
2014/04/12 职场文书
2014年征兵标语
2014/06/20 职场文书
金融系毕业生自荐书
2014/07/08 职场文书
党员个人对照检查材料
2014/10/01 职场文书
食品药品安全责任书
2015/05/11 职场文书
肖申克救赎观后感
2015/06/02 职场文书
利用Nginx代理如何解决前端跨域问题详析
2021/04/02 Servers
Typescript类型系统FLOW静态检查基本规范
2022/05/25 Javascript