UglifyJS3 壓縮JS


一. 軟件安裝

      步驟一:安裝node.js, 下載地址:https://nodejs.org/en/,選擇8.11.2 LTS 版本;

      步驟二:安裝npm, 點擊開始-cmd,切換至安裝目錄 輸入npm install npm –g ;

      步驟三:安裝UglifyJs, npm install uglify-js –g ;

     經過如上步驟,安裝后的版本為UglifyJS3,其中安裝目錄中的node.exe是個解析器,終端敲命令node的時候,實際上系統就經過環境變量找到node的目錄,然后找到了node.exe,然后使用node.exe進行解析。

二.壓縮JS

    單個文件壓縮方式

              步驟一:在桌面建一個文件夾js,然后找一個js文件放入其中;

              步驟二:點擊開始--node.js command prompt 

                

                               經過如上操作后,會在js文件夾中sheng生成一個名為pickup.min_service.js的文件。

      批量壓縮 

              步驟一:新建TXT文件,copy以下代碼:

@echo off
:: 設置壓縮JS文件的根目錄,腳本會自動按樹層次查找和壓縮所有的JS
SET JSFOLDER=C:\Users\Administrator\Desktop\formini
echo 正在查找JS文件
chdir /d %JSFOLDER%
for /r . %%a in (*.js) do (
    @echo 正在壓縮 %%~a ...
    uglifyjs %%~fa  -m -o %%~fa
)
echo 完成!
pause & exit

          步驟二: 將代碼的后綴名改為.bat,運行該bat文件,即可執行批量壓縮,壓縮后的文件自動替換原來未壓縮的文件。

     三.指令介紹

 

-h, --help                  列出使用指南。
                              `--help options` 獲取可用選項的詳情。
  -V, --version               打印版本號。
  -p, --parse <options>       指定解析器配置選項:
                              `acorn`  使用 Acorn 來解析。
                              `bare_returns`  允許在函數外return。
                                              在壓縮CommonJS模塊或`.user.js `引擎調用被同步執行函數包裹的用戶腳本 時會用到。
                              `expression`  不是解析文件,二是解析一段表達式 (例如解析JSON).
                              `spidermonkey`  輸入文件是 SpiderMonkey
                                              AST 格式 (JSON).
  -c, --compress [options]    啟用壓縮(true/false)/指定壓縮配置:
                              `pure_funcs`  傳一個函數名的列表,當這些函數返回值沒被利用時,該函數會被安全移除。
  -m, --mangle [options]       啟用混淆(true/false)/指定混淆配置:
                              `reserved`  不被混淆的名字列表。
  --mangle-props [options]    混淆屬性/指定壓縮配置:
                              `builtins`  混淆那些與標准JS全局變量重復的名字。
                              `debug`  添加debug前綴和后綴。
                              `domprops`  混淆那些魚DOM屬性名重復的名字。
                              `keep_quoted`  只混淆沒括起來的屬性名。
                              
                              `regex`  只混淆匹配(該正則)的名字。
                              `reserved`  不需要混淆的名字的列表(即保留)。
  -b, --beautify [options]    是否美化輸出(true/false)/指定輸出配置:
                              `beautify`  默認是啟用.
                              `preamble`  預設的輸出文件頭部。你可以插入一段注釋,比如版權信息。它不會被解析,但sourcemap會因此調整。
                              `quote_style`  括號類型:
                                              0 - auto自動
                                              1 - single單引號
                                              2 - double雙引號
                                              3 - original跟隨原碼
                              `wrap_iife`  把立即執行函數括起來。注意:你或許應禁用壓縮配置中的`negate_iife`選項。 

 -o, --output <file>         輸出文件路徑 (默認 STDOUT). 指定 `ast` 或
                                `spidermonkey`的話分別是輸出UglifyJS或SpiderMonkey AST。
    --comments [filter]         保留版權注釋。默認像Google Closure那樣,保留包含"@license"或"@preserve"這樣JSDoc風格的注釋。你可以傳以下的參數:
                                - "all" 保留全部注釋
                                - 一個合適的正則,如 `/foo/` 或 `/^!/`,保留匹配到的注釋。 
                                注意,在啟用壓縮時,因為死代碼被移除或壓縮聲明為一行,並非*所有*的注釋都會被保留。
    --config-file <file>        從此JSON文件讀取 `minify()` 配置。
    -d, --define <expr>[=value] 定義全局變量。
    --ie8                       支持IE8。
                                等同於在`minify()`的`compress`、 `mangle` 和 `output`配置設置`ie8: true`。UglifyJS不會默認兼容IE8。
    --keep-fnames               不要混淆、干掉的函數的名字。當代碼依賴Function.prototype.name時有用。
    --name-cache <file>         用來保存混淆map的文件。
    --self                      把UglifyJS本身也構建成一個依賴包
                                (等同於`--wrap UglifyJS`)
    --source-map [options]      啟用 source map(true/false)/指定sourcemap配置:
                                `base` 根路徑,用於計算輸入文件的相對路徑。
                                `content`  輸入sourcemap。假如的你要編譯的JS是另外的源碼編譯出來的。
                                假如該sourcemap包含在js內,請指定"inline"。 
                                `filename`  輸出文件的名字或位置。
                                `includeSources`  如果你要在sourcemap中加上源文件的內容作sourcesContent屬性,就傳這個參數吧。
                                `root`  此路徑中的源碼編譯后會產生sourcemap.
                                `url`   如果指定此值,會添加sourcemap相對路徑在`//#sourceMappingURL`中。
    --timings                   在STDERR顯示操作運行時間。
    --toplevel                  壓縮/混淆在最高作用域中聲明的變量名。
    --verbose                   打印診斷信息。
    --warn                      打印警告信息。
    --wrap <name>               把所有代碼包裹在一個大函數中。讓“exports”和“global”變量有效。
                                你需要傳一個參數來指定此模塊的名字,以便瀏覽器引用。        

  具體關於uglifyjs3的介紹可參考:https://jingyan.baidu.com/article/91f5db1b3e1f991c7f05e395.html

                                                              https://github.com/mishoo/UglifyJS2

                                                             https://www.npmjs.com/package/uglify-js

       關於SourceMap介紹可參考:

http://www.ruanyifeng.com/blog/2013/01/javascript_source_map.html
http://ju.outofmemory.cn/entry/34885
http://www.uedsc.com/jquery-min-map-404-not-found.html
https://blog.csdn.net/junli_chen/article/details/47355611?locationNum=6
https://qianduan.group/posts/59e5c3d0cf830d7057327c95
http://www.css88.com/doc/chrome-devtools/javascript/source-maps/

     關於sourceMappingURL,使用chrome瀏覽器進行調試時,可以根據壓縮后js文件中末尾的sourceMappingURL,獲取未壓縮的js,這樣進行調試時,就可以看懂js文件內容了。但是當把項目部署到服務器中時,由於jsp頁面和js不在同一個文件夾中,瀏覽器進行訪問時,是根據當前瀏覽器中的URL進行訪問的,結果獲取不到未壓縮的js文件。

 


免責聲明!

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



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