webpack學習(六)打包壓縮js和css


打包壓縮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,如果混淆的話就會影響到代碼的正常運行。

列幾個壓縮時常有的屬性:

  • dead_code -- 移除沒被引用的代碼

  • loops -- 當dowhilefor循環的判斷條件可以確定是,對其進行優化。

  • warnings -- 當刪除沒有用處的代碼時,顯示警告

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM