一. 軟件安裝
步驟一:安裝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文件。