webpack 打包壓縮js和css的方法示例
打包壓縮js與css
由于webpack本身集成了UglifyJS插件(webpack.optimize.UglifyJsPlugin)來(lái)完成對(duì)JS與CSS的壓縮混淆,無(wú)需引用額外的插件,
其命令 webpack -p 即表示調(diào)用UglifyJS來(lái)壓縮代碼,還有不少webpack插件如 html-webpack-plugin 也會(huì)默認(rèn)使用UglifyJS。
uglify-js的發(fā)行版本只支持ES5,如果你要壓縮ES6+代碼請(qǐng)使用開(kāi)發(fā)分支。
UglifyJS可用的選項(xiàng)有:
parse 解釋
compress 壓縮
mangle 混淆
beautify 美化
minify 最小化//在插件HtmlWebpackPlugin中使用
CLI 命令行工具
sourcemap 編譯后代碼對(duì)源碼的映射,用于網(wǎng)頁(yè)調(diào)試
AST 抽象語(yǔ)法樹(shù)
name 名字,包括變量名、函數(shù)名、屬性名
toplevel 頂層作用域
unreachable 不可達(dá)代碼
option 選項(xiàng)
STDIN 標(biāo)準(zhǔn)輸入,指在命令行中直接輸入
STDOUT 標(biāo)準(zhǔn)輸出
STDERR 標(biāo)準(zhǔn)錯(cuò)誤輸出
side effects函數(shù)副作用,即函數(shù)除了返回外還產(chǎn)生別的作用,比如改了全局變量
列一份配置:
//使用插件html-webpack-plugin打包合并html
//使用插件extract-text-webpack-plugin打包獨(dú)立的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'] //用于配置程序可以自行補(bǔ)全哪些文件后綴
},
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, //移除沒(méi)被引用的代碼
warnings: false, //當(dāng)刪除沒(méi)有用處的代碼時(shí),顯示警告
loops: true //當(dāng)do、while 、 for循環(huán)的判斷條件可以確定是,對(duì)其進(jìn)行優(yōu)化
},
except: ['$super', '$', 'exports', 'require'] //混淆,并排除關(guān)鍵字
})
]
};
這里需要注意的是壓縮的時(shí)候需要排除一些關(guān)鍵字,不能混淆,比如$或者require,如果混淆的話(huà)就會(huì)影響到代碼的正常運(yùn)行。
列幾個(gè)壓縮時(shí)常有的屬性:
- dead_code -- 移除沒(méi)被引用的代碼
- loops -- 當(dāng) do 、 while 、 for 循環(huán)的判斷條件可以確定是,對(duì)其進(jìn)行優(yōu)化。
- warnings -- 當(dāng)刪除沒(méi)有用處的代碼時(shí),顯示警告
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
JavaScript?中使用SpreadJS導(dǎo)入和導(dǎo)出?Excel?文件的方法
這篇文章主要介紹了如何在?JavaScript?中使用SpreadJS導(dǎo)入和導(dǎo)出?Excel?文件,本文通過(guò)圖文實(shí)例代碼相結(jié)合給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-09-09
JavaScript實(shí)現(xiàn)隨機(jī)五位數(shù)驗(yàn)證碼
這篇文章主要為大家詳細(xì)介紹了JavaScript實(shí)現(xiàn)隨機(jī)五位數(shù)驗(yàn)證碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-09-09
JS庫(kù)之Three.js 簡(jiǎn)易入門(mén)教程(詳解之一)
three.js是一款webGL框架,由于其易用性被廣泛應(yīng)用。下面腳本之家小編通過(guò)案例給大家闡述three.js的基本配置方法,具體內(nèi)容詳情大家參考下本文吧2017-09-09
讓iframe自適應(yīng)高度(支持XHTML,支持FF)
讓iframe自適應(yīng)高度(支持XHTML,支持FF)...2007-07-07
ES6記錄異步函數(shù)的執(zhí)行時(shí)間詳解
在這篇文章里,我會(huì)實(shí)現(xiàn)一個(gè)可重用的函數(shù)來(lái)處理 JavaScript 延時(shí)異步操作。有需要的小伙伴們可以參考借鑒,下面來(lái)一起看看。2016-08-08
JavaScript實(shí)現(xiàn)簡(jiǎn)易計(jì)算器案例
這篇文章主要為大家詳細(xì)介紹了JavaScript實(shí)現(xiàn)簡(jiǎn)易計(jì)算器案例,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下<BR>2022-07-07

