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 打造动态下滑菜单实现说明
Apr 15 Javascript
合并table相同单元格的jquery插件分享(很精简)
Jun 20 Javascript
关于使用 jBox 对话框的提交不能弹出问题解决方法
Nov 07 Javascript
创建、调用JavaScript对象的方法集锦
Dec 24 Javascript
Jquery检验手机号是否符合规则并根据手机号检测结果将提交按钮设为不同状态
Nov 26 Javascript
javascript实现九宫格相加数值相等
May 28 Javascript
jQuery Mobile页面返回不需要重新get
Apr 26 Javascript
vue父组件向子组件动态传值的两种方法
Nov 11 Javascript
JavaScript常见JSON操作实例分析
Aug 08 Javascript
微信js-sdk 录音功能的示例代码
Nov 01 Javascript
详解vue 组件
Jun 11 Javascript
vue的hash值原理也是table切换实例代码
Dec 14 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
如何选购合适的收音机
2021/03/01 无线电
php 数组的合并、拆分、区别取值函数集
2010/02/15 PHP
初品cakephp 入门基础
2012/02/16 PHP
php+croppic.js实现剪切上传图片功能
2018/08/14 PHP
Laravel 框架基于自带的用户系统实现登录注册及错误处理功能分析
2020/04/14 PHP
js 返回时间戳所对应的具体时间
2010/07/20 Javascript
js TextArea的选中区域处理
2010/12/28 Javascript
清除浏览器缓存的几种方法总结(必看)
2016/12/09 Javascript
js中开关变量使用实例
2017/02/24 Javascript
AngularJS页面带参跳转及参数解析操作示例
2017/06/28 Javascript
JavaScript控制浏览器全屏显示简单示例
2018/07/05 Javascript
JavaScript简单实现关键字文本搜索高亮显示功能示例
2018/07/25 Javascript
Element实现表格分页数据选择+全选所有完善批量操作
2019/06/07 Javascript
JS实现利用闭包判断Dom元素和滚动条的方向示例
2019/08/26 Javascript
vue引用外部JS的两种种方法
2020/01/28 Javascript
jQuery实现购物车全功能
2021/01/11 jQuery
python 基础学习第二弹 类属性和实例属性
2012/08/27 Python
使用python实现正则匹配检索远端FTP目录下的文件
2015/03/25 Python
Python语言的面相对象编程方式初步学习
2016/03/12 Python
20招让你的Python飞起来!
2016/09/27 Python
Python高级用法总结
2018/05/26 Python
Anaconda下安装mysql-python的包实例
2018/06/11 Python
python定向爬虫校园论坛帖子信息
2018/07/23 Python
Python列表list常用内建函数实例小结
2019/10/22 Python
python 给图像添加透明度(alpha通道)
2020/04/09 Python
Python socket服务常用操作代码实例
2020/06/22 Python
浅谈anaconda python 版本对应关系
2020/10/07 Python
利用Pycharm + Django搭建一个简单Python Web项目的步骤
2020/10/22 Python
canvas像素点操作之视频绿幕抠图
2018/09/11 HTML / CSS
Dune London官网:英国著名奢华鞋履品牌
2017/11/30 全球购物
Pretty Green美国:英式摇滚服饰风格代表品牌之一
2019/01/23 全球购物
VLAN和VPN有什么区别?分别实现在OSI的第几层?
2014/12/23 面试题
会计岗位职责范本
2014/03/07 职场文书
2014高考励志标语
2014/06/05 职场文书
学校总务处领导班子民主生活会对照检查材料思想汇报
2014/09/27 职场文书
2014年个人总结范文
2015/03/09 职场文书