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 相关文章推荐
javascript通过className来获取元素的简单示例代码
Jan 10 Javascript
jquery实现input输入框实时输入触发事件代码
Jan 28 Javascript
jQuery DOM操作实例
Mar 05 Javascript
jquery.cookie.js使用指南
Jan 05 Javascript
浅谈json取值(对象和数组)
Jun 24 Javascript
React 源码中的依赖注入方法
Nov 07 Javascript
js中arguments对象的深入理解
May 14 Javascript
vue日历/日程提醒/html5本地缓存功能
Sep 02 Javascript
vue实现鼠标经过动画
Oct 16 Javascript
详解node.js 事件循环
Jul 22 Javascript
vue项目如何监听localStorage或sessionStorage的变化
Jan 04 Vue.js
吃通javascript正则表达式
Apr 21 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 创建文件(文件夹)以及目录操作代码
2010/03/04 PHP
Zend Framework实现具有基本功能的留言本(附demo源码下载)
2016/03/22 PHP
CentOS下搭建PHP环境与WordPress博客程序的全流程总结
2016/05/07 PHP
利用google提供的API(JavaScript接口)获取网站访问者IP地理位置的代码详解
2010/07/24 Javascript
纯js实现背景图片切换效果代码
2010/11/14 Javascript
[JSF]使用DataModel处理表行事件的实例代码
2013/08/05 Javascript
Javascript堆排序算法详解
2014/12/03 Javascript
jquery实现用户打分评分特效
2015/05/28 Javascript
jQuery版本升级踩坑大全
2016/01/12 Javascript
jQuery模拟完美实现经典FLASH导航动画效果【附demo源码下载】
2016/11/09 Javascript
canvas 画布在主流浏览器中的尺寸限制详细介绍
2016/12/15 Javascript
基于BootStrap栅格栏系统完成网站底部版权信息区
2016/12/23 Javascript
validationEngine 表单验证插件使用实例代码
2017/06/15 Javascript
Javascript之图片的延迟加载的实例详解
2017/07/24 Javascript
vue2.0 实现导航守卫的具体用法(路由守卫)
2018/05/17 Javascript
JavaScript动态创建二维数组的方法示例
2019/02/01 Javascript
Node.js原生api搭建web服务器的方法步骤
2019/02/15 Javascript
Vue 解决路由过渡动画抖动问题(实例详解)
2020/01/05 Javascript
node.js中process进程的概念和child_process子进程模块的使用方法示例
2020/02/11 Javascript
JS实现简单移动端鼠标拖拽
2020/07/23 Javascript
vue-preview动态获取图片宽高并增加旋转功能的实现
2020/07/29 Javascript
Vue+Java+Base64实现条码解析的示例
2020/09/23 Javascript
Python数据结构与算法之图的最短路径(Dijkstra算法)完整实例
2017/12/12 Python
python+matplotlib演示电偶极子实例代码
2018/01/12 Python
Python通过调用有道翻译api实现翻译功能示例
2018/07/19 Python
Python 占位符的使用方法详解
2019/07/10 Python
Python操作Mongodb数据库的方法小结
2019/09/10 Python
关于jupyter打开之后不能直接跳转到浏览器的解决方式
2020/04/13 Python
Python中的Cookie模块如何使用
2020/06/04 Python
Python爬虫实例之2021猫眼票房字体加密反爬策略(粗略版)
2021/02/22 Python
C语言开发工程师测试题
2016/12/20 面试题
介绍一下Prototype的$()函数,$F()函数,$A()函数都是什么作用?
2014/03/05 面试题
2015新年联欢晚会开场白
2014/12/14 职场文书
学生保证书格式
2015/02/27 职场文书
《学会看病》教学反思
2016/02/17 职场文书
golang goroutine顺序输出方式
2021/04/29 Golang