鍍金池/ 問答/Linux  網(wǎng)絡安全  HTML/ webpack的js壓縮插件如何使用?

webpack的js壓縮插件如何使用?

網(wǎng)上很多資料都是壓縮混淆過的js文件,他們是用的什么工具來壓縮混淆的呢?
查到過一個webpack的插件uglifyjs-webpack-plugin。但是不知道怎么使用。
根據(jù)教程一步步走,壓縮混淆完之后沒法使用了。
我的入口文件是這樣的:

function abc(){
    console.log("abc");
}
console.log(12);
var first="first name";
console.log(first);
var lottery=(function(){
    function lottery(){
        this.name="lottery name";
    }
    return lottery;
})

壓縮混淆完之后定義的變量成了一個字符,abc(),first,lottery這些自定義的方法或者變量都沒有了,但是我在頁面中都使用引用了這些方法。
是哪里的代碼有問題呢?
我的配置代碼如下:

const uglifyWebpackPlugin=require("uglifyjs-webpack-plugin");
const path=require("path")
module.exports={
    entry:"./src/index",
    output:{
        path: path.resolve(__dirname, 'dist'),
        filename: 'build.js'
    },
    plugins:[
        new uglifyWebpackPlugin(
            {
            uglifyOptions:{
                mangle:{
                    reserved:["abc","first","lottery"]
                },
                compress:true
            }
        })
    ]
}

謝謝。

回答
編輯回答
絯孑氣

webpack中每一個文件都是模塊,在文件中申明的方法名都會被壓縮掉。所以你想達到在頁面中直接使用這些方法要改成

window.lottery = (function(){
    function lottery(){
        this.name="lottery name";
    }
    return lottery;
})
2017年12月21日 04:33
編輯回答
有你在

原因不是你的reserved沒生效,是因為你的compress設置,true會把子屬性unused也設置為true,未被運行的代碼都被刪掉了。

你可以試試

compress: {
    unused: false,
}
2017年7月22日 18:14
編輯回答
還吻
new webpack.optimize.UglifyJsPlugin({
    // 最緊湊的輸出
    beautify: false,
    // 刪除所有的注釋
    comments: false,
    compress: {
        // 在UglifyJs刪除沒有用到的代碼時不輸出警告
        warnings: false,
        // 刪除所有的 `console` 語句
        // 還可以兼容ie瀏覽器
        drop_console: true,
        // 內(nèi)嵌定義了但是只用到一次的變量
        collapse_vars: true,
        // 提取出出現(xiàn)多次但是沒有定義成變量去引用的靜態(tài)值
        reduce_vars: true
    }
})
2017年7月6日 05:50