﻿# 如何在 Windows 作業系統安裝 Node.js 執行環境 (Cygwin)

由於 [jQuery 1.5](http://jquery.com/) 在前幾天釋出正式版，我從 [Release Notes](http://blog.jquery.com/2011/01/31/jquery-15-released/) 中發現 [jQuery Team](http://jquery.org/team) 這次改用 [UglifyJS](https://github.com/mishoo/UglifyJS) 對整個 [jQuery](http://jquery.com/) 原始碼進行編譯 (其實是將 JS 最小化)（原本是使用 [Google Closure Compiler](https://developers.google.com/closure/compiler/) ），但 [UglifyJS](https://github.com/mishoo/UglifyJS) 只能執行在 [NodeJS](http://nodejs.org/) 執行環境下，原本 [NodeJS](http://nodejs.org/) 只能跑在 Linux 環境下，還好從  node.js v0.2 版之後就開始支援在 Windows 環境下執行，以下是設立 [NodeJS](http://nodejs.org/) 執行環境的流程。

**⊙ 下載並安裝 Cygwin 並選取 Node.js 所需的額外套件**

下載 [http://cygwin.com/setup.exe](http://cygwin.com/setup.exe "http://cygwin.com/setup.exe")

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

![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/751e939be1f8403bab55-SNAGHTML7d83d1.png)

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

![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/06daee997cd2a2a2b8c0-SNAGHTML7ec524.png)

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

如果有看到 \*.tw 的台灣 Mirror 站建議選台灣的，沒有的話選日本會比較快：

![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/2012d003e16800a4cea7-SNAGHTML826a68.png)

如果您是首次安裝 Cygwin 可以直接忽略這個警告訊息，如果你之前已經安裝 Cygwin 1.7 之前的版本就應注意，請參考 [What's new and what changed in Cygwin 1.7](http://cygwin.com/cygwin-ug-net/ov-new1.7.html) 文章說明。

![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/4c477a33faf8bcbd5224-SNAGHTML83c0f0.png)

選取套件時必須選取 Node.js 所需的額外套件，由於套件很多，建議用搜尋的方式來找尋套件：

[![image](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/cb154fadcb9e0241ca88-image_thumb_51.png "image")](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/45237926ada3c51392b1-image_527.png)

**Devel 分類**

-   **gcc-g++**: C++ compiler
-   **gcc-mingw-g++**: Mingw32 support headers and libraries for GCC C++
-   **gcc4-g++**: G++ subpackage
-   **git**: Fast Version Control System – core files ( 如果需要從 github 下載最新版源碼可以裝這個 )
-   **make**: The GNU version of the 'make' utility
-   **openssl-devel**: The OpenSSL development environment
-   **pkg-config**: A utility used to retrieve information about installed libraries
-   **zlib-devel**: The zlib compression/decompression library (development)

**Editor 分類**

-   **vim**: Vi IMproved - enhanced vi editor

**Python 分類**

-   整個類別全部安裝，你只要點選 Python 右邊的圖示並切換至 Install 即可。  
    ![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/1269ff7bd36ed1067932-image_528.png)

**Web 分類**

-   **wget**: Utility to retrieve files from the WWW via HTTP and FTP
-   **curl**: Multi-protocol file transfer command-line tool

下一步之後會提示你有許多相依的套件需要安裝，基本上直接按下一步即可

![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/83720270461d1311fd28-SNAGHTMLaad970.png)

接下來的安裝過程有點久，安裝時間跟你的網路速度有些關係，因為需要動態下載需安裝的檔案。

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

**⊙ 在 Windows Vista 以後的版本，必須在 Cywgin 的 ASH 模式下執行 rebaseall 才能正常編譯**

1.  開啟命令提示字元 (Command Prompt)
2.  進入 **C:\\cygwin\\bin** 目錄
3.  執行 **ash** 進入 Shell 模式
4.  執行 **./rebaseall -v** 完成編譯時所有相依函式庫的對應
5.  執行 **exit** 退出 ash

![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/6d18d50b6480dc4634ed-image_529.png)

**⊙ 開啟 Cygwin 視窗，下載、編譯、安裝 Node.JS**

先複製最新版的 Node.js 原始碼網址，再到 Cygwin 視窗用 wget 下載到 Cygwin 執行環境下

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

請參考以下指令進行下載、解壓縮、編譯、安裝：

```
   1:  wget http://nodejs.org/dist/node-v0.2.6.tar.gz
```

```
   2:  tar xf node-v0.2.6.tar.gz
```

```
   3:  cd node-v0.2.6
```

```
   4:  ./configure
```

```
   5:  make
```

```
   6:  make install
```

執行完成後就可以立即使用 NodeJS 了，可以輸入以下指令查詢您成功安裝的 node 版本編號：

```
node --version
```

![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/2448863bfd9ead89b85c-image_531.png)

照理說 [node.js](http://nodejs.org/) 應該已經可以使用了，不過由於 [node.js](http://nodejs.org/) 採用 [c-ares](http://c-ares.haxx.se/) 函式庫來解析 DNS，而該函式庫又會抓取 /etc/resolv.conf 裡的 Nameserver 定義，所以你必須手動建立 /etc/resolv.conf 檔案並設定名稱伺服器位址才能讓 [node.js](http://nodejs.org/) 執行網路功能時正常運作，以下是該檔案的內容。

```
nameserver 168.95.1.1
nameserver 8.8.8.8
nameserver 8.8.4.4
```

最後，我們要來測試 [node.js](http://nodejs.org/) 是否真的可以在 Windows 上執行，我們就來用 [node.js](http://nodejs.org/) 寫一個最簡單的 HTTP Server，用來回應一個簡單的字串，而這也是在 [node.js](http://nodejs.org/) 官網上最經典的範例。

用 vi 建立一個 example.js 檔案，內容如下：

```
var http = require('http');

http.createServer(function (request, response) {
  response.writeHead(200, {'Content-Type': 'text/html'});
  response.end('<b>Hello World from Cygwin</b>');
}).listen(8124);

console.log('Server running at http://127.0.0.1:8124/');
```

然後使用以下指令執行：

```
node example.js
```

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

最後用瀏覽器察看該網址就知道有沒有正常執行了：

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

安裝完成！

**【後記】**

其實在十多年前 JavaScript 就有 Server 的版本 (Netscape's LiveWire)，但一直以來都是 Client-side JavaScript 在流行，實在沒想到在 Client-side JavaScript 被徹底濫用的今天竟然讓 [Server-side JavaScript](http://en.wikipedia.org/wiki/Server-side_JavaScript) (SSJS) 漸漸復甦起來，而且這次的 [node.js](http://nodejs.org/) 似乎來勢洶洶，我覺得是個值得關注的技術。

以下是一場關於[介紹 NodeJS 的演講](https://www.youtube.com/watch?v=jo_B4LTHi3I)，有興趣且過年無聊的人可以下載 HD 的版本回來慢慢觀看：

<object width="510" height="287"><param name="movie" value="http://d.yimg.com/m/up/ypp/default/player.swf"><param name="flashVars" value="vid=19897538&amp;"><param name="allowfullscreen" value="true"><param name="wmode" value="transparent"><embed width="510" height="287" allowfullscreen="true" src="http://d.yimg.com/m/up/ypp/default/player.swf" type="application/x-shockwave-flash" flashvars="vid=19897538&amp;"></object>

**相關連結**

-   [Cygwin](http://www.cygwin.com/)
-   [node.js](http://nodejs.org/)
-   [V8 JavaScript Engine](http://code.google.com/p/v8/)
-   [YUI Theater — Ryan Dahl: “Introduction to NodeJS” (58 min.)](https://www.youtube.com/watch?v=jo_B4LTHi3I)
-   Getting Started with Node.js on Windows
-   [JQUERY 1.5 RELEASED](http://blog.jquery.com/2011/01/31/jquery-15-released/)
-   [mishoo/UglifyJS – GitHub](https://github.com/mishoo/UglifyJS)
-   [Matthew Podwysocki | CodeBetter.Com](https://web.archive.org/web/20210127143604/http://codebetter.com/matthewpodwysocki/)
-   [Reactive Extensions for JavaScript](http://msdn.microsoft.com/en-us/devlabs/ee794896.aspx)
-   [Douglas Crockford: “Crockford on JavaScript — Scene 6: Loopage” (52 min.)](https://www.youtube.com/watch?v=QgwSUtYSUqA)
-   [NodeJS: To V8 or not to V8](http://www.olympum.com/future/nodejs-to-v8-or-not-to-v8/)
