﻿# 如何在 node.js 執行 UglifyJS 對 JavaScript 進行壓縮或美化

[前一篇文章](/post/2011/02/03/Getting-Started-with-NodeJS-on-Windows-using-Cygwin.aspx)我介紹了如何在 Cygwin 環境下安裝 node.js，我的原始目的只是為了要能正常執行 [UglifyJS](https://github.com/mishoo/UglifyJS) 而已，原本想說在 node.js 寫的程式都是 JavaScript 應該不會有什麼問題吧，結果是目前版本的 [UglifyJS](https://github.com/mishoo/UglifyJS) 還有點小問題導致無法正常執行，解決方式也很簡單，以下是 [UglifyJS](https://github.com/mishoo/UglifyJS) 的安裝與使用說明。

**下載 UglifyJS 最新版原始碼**

```
env GIT_SSL_NO_VERIFY=true git clone https://github.com/mishoo/UglifyJS.git
```

![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/6101a7162b07ad0c4711-image_534.png)

**備註**：如果不加上 **env GIT\_SSL\_NO\_VERIFY=true** 這段環境變數的話，很可能會導致 git 在 clone 原始碼的時候發生 SSL 憑證發生問題的錯誤，錯誤訊息為：error: SSL certificate problem, verify that the CA cert is OK. 如下圖示。

![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/0dad13995c7e2a6cd6f7-image_535.png)

完整的解決辦法可參考 [HTTPS github access](http://stackoverflow.com/questions/3777075/https-github-access) 的解答，或執行以下指令：

-   cd /usr/ssl/certs
-   wget http://curl.haxx.se/ca/cacert.pem
-   cat cacert.pem | awk 'split\_after==1{n++;split\_after=0} /-----END CERTIFICATE-----/ {split\_after=1} {print > "cert" n ".pem"}'
-   rm -f cacert.pem
-   c\_rehash

**進入 UglifyJS 的目錄**

```
cd UglifyJS/
```

**測試執行 ./bin/uglifyfs**

```
./bin/uglifyfs
```

在預設的原始碼之下，不管在 Linux 或 Cygwin 下都會發生 Cannot find module 'ulify-js' 的錯誤：

![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/ca734eee8ff27609733d-image_536.png)

**解決的方式有 3 種：**

1\. 修改 bin/uglifyjs 這支 [UglifyJS](https://github.com/mishoo/UglifyJS) 主程式，並加入程式所在的相對路徑，讓 bin/uglifyjs 在執行時能找到對應的模組。如下圖示：

![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/79765ef26a7207dc092f-image_537.png)

2\. 將 [UglifyJS](https://github.com/mishoo/UglifyJS) 所有模組都複製到 node 預設的 **~/.node\_libraries** 目錄下 ( 僅自己能用 )

請在 UglifyJS 所在目錄執行以下 3 行指令即可

```
mkdir ~/.node_libraries
```

```
cp -a lib/ ~/.node_libraries/
```

```
cp index.js ~/.node_libraries/uglify-js.js
```

![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/737fe6262c769ab60df0-image_538.png)

3\. 將 [UglifyJS](https://github.com/mishoo/UglifyJS) 所有模組都複製到 node 預設的 **/usr/local/lib/node** 目錄下 ( 讓所有使用者都能用 )

請在 UglifyJS 所在目錄執行以下 2 行指令即可

```
mkdir /usr/local/lib/node/uglify-js
```

```
cp -a index.js lib/ /usr/local/lib/node/uglify-js/
```

**將 uglifyfs 主程式複製到 /usr/local/bin 目錄下**

```
cp bin/uglifyjs /usr/local/bin/uglifyjs
```

  
[UglifyJS](https://github.com/mishoo/UglifyJS) 安裝完成！

**UglifyJS 的基本使用方式**

1\. 壓縮 JavaScript 程式碼

```
uglifyjs example.js  > example.min.js
```

![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/e0d86402599604c44eec-image_539.png)

2\. 美化 JavaScript 程式碼

```
uglifyjs -b example.min.js > example.js
```

![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/08bd546c57d634fdedc4-image_540.png)

**相關連結**

-   [mishoo/UglifyJS – GitHub](https://github.com/mishoo/UglifyJS)
-   [HTTPS github access](http://stackoverflow.com/questions/3777075/https-github-access)
-   [Extract CA Certs from mozilla.org](http://curl.haxx.se/docs/caextract.html)
