在Raspberry Pi編譯與安裝最新版Node.js

Node.js是一個獨立的JavaScript執行環境(亦即,不在瀏覽器中執行的JavaScript),可以讓我們使用JavaScript程式語言開發應用程式,直接在Windows, Mac OS X和Linux/Unix等系統上執行。

Node.js

在Raspbian Wheezy系統使用apt-get命令安裝Node.js(例如:sudo apt-get install nodejs),將會安裝0.6版本,Raspbian Jessie系統內建的是0.10.29版,跟目前最新5.8.0版差距不小(註:在經過Node.js和io.js陣營鬧分家又合併事件之後,Node.js從0.12.x版直接躍升到4.x版)。

在Raspbian Jessie系統上編譯新版Node.js

在Jessie系統上編譯Node.js原始碼的步驟,跟其他Linux軟體一樣:

  1. 使用wget命令下載原始碼(壓縮檔)
  2. 解壓縮
  3. 切換到解壓縮檔案後的目錄
  4. 執行./configure設置編譯環境
  5. 執行make開始編譯
  6. 執行make install安裝編譯好的軟體

Node.js的所有版本都可以在https://nodejs.org/dist/路徑底下的各個子路徑取得,例如,v4.4.0版位在“latest-v4.x/”或“v4.4.0/ ”路徑底下:

https://nodejs.org/dist/路徑

此外,這個檔案路徑始終代表目前的最新版本:

https://nodejs.org/dist/node-latest.tar.gz

Node.js官網目前建議大眾使用的版本是4.4.0,想嘗試新功能的人可安裝5.8.0版(具體的新增功能請參閱Node.js官網的What You Should Know about Node.js v5 and More)。

假設要編譯5.8.0版,請在終端機視窗中依序執行下列命令:

wget https://nodejs.org/dist/v5.8.0/node-v5.8.0.tar.gz
tar -xvzf node-v5.8.0.tar.gz
cd node-v5.8.0
./configure
make

在樹莓派2代和3代,make命令後面可以附加-j 4參數,代表使用四核心進行編譯,加快編譯速度(但仍需花費數十分鐘):

make -j 4

編譯完成之後,可用管理員身份執行make install命令安裝Node.js:

sudo make install

或者,先把編譯完成的檔案封裝成一個套件包(.deb檔),再透過.deb檔安裝也行。安裝新版Node.js之前,你可能需要先執行底下的命令,刪除系統預先安裝的Node.js:

sudo apt-get remove nodejs

製作、下載與安裝Node.js的Debian套件包(.deb檔)

Debian是一種Linux作業系統發行版本,它的軟體安裝套件的檔案格式為.deb;Raspbian是基於Debian系統的樹莓派硬體最佳化版本,所以也能使用.deb檔案安裝軟體。

程式原始碼編譯完成(亦即,成功執行make命令)之後,若想要佈署在其他樹莓派或者分享給他人使用,可透過checkinstall工具程式建立.deb格式的套件包(詳細說明請參閱IBM 中国软件开发中心的「Linux的源码安装工具CheckInstall」文章)。

請先安裝checkinstall:

sudo apt-get install checkinstall

接著,在上一節的node-v5.8.0路徑裡面,以管理員身份執行checkinstall命令(後面的參數代表封裝完畢後先不要安裝,以及設定此套件包的版本編號):

sudo checkinstall --install=no --pkgversion 5.8.0

等待一段時間之後(註:進行封裝之前,它大概會詢問三個問題,直接按下Enter鍵採用預設值即可),它將在node-v5.8.0目錄當中建立一個node_5.8.0-1_armhf.deb檔,檔名裡的armhf代表它是一種ARM處理器的二進位檔(可執行檔)。

封裝好的Node.js安裝套件

筆者把編譯好的node_4.4.0-1_armhf.deb和node_5.8.0-1_armhf.deb檔存放在Google雲端磁碟,不想花費數十分鐘編譯的朋友可直接下載到樹莓派,並在下載路徑中執行dpkg命令安裝Node.js:

sudo dpkg -i node_5.8.0-1_armhf.deb

測試Node.js

安裝完畢後,可先執行底下的命令查看Node.js和npm的版本:

查看Node.js和npm的版本

用一個簡單的HTTP伺服器程式測試看看:

const http = require('http');
const port = 8080;

http.createServer((req, res) => {
   res.writeHead(200, { 'Content-Type': 'text/html' });
   res.end('<h1>Hello World</h1>');
}).listen(port, () => {
   console.log('本機網站伺服器在 ${port} 埠啟動了!');
});

確認能正常運作:

瀏覽器連結Node.js網站伺服器程式

Raspbian Wheezy系統上安裝GCC 4.8

本節內容摘譯自Andy Felong先生的這篇貼文:Node.js v4 & v5 on Raspberry Pi 2。在Raspbian Wheezy系統上編譯新版的Node.js,需要將gcc/g++編譯器升級到4.8版。

先使用nano編輯軟體來源清單:

sudo nano /etc/apt/sources.list

改成底下的內容:

deb http://mirrordirector.raspbian.org/raspbian/ wheezy main contrib non-free rpi
deb http://archive.raspbian.org/raspbian wheezy main contrib non-free rpi
# Source repository to add
deb-src http://archive.raspbian.org/raspbian wheezy main contrib non-free rpi
deb http://mirrordirector.raspbian.org/raspbian/ jessie main contrib non-free rpi
deb http://archive.raspbian.org/raspbian jessie main contrib non-free rpi
# Source repository to add
deb-src http://archive.raspbian.org/raspbian jessie main contrib non-free rpi

新增偏好設定檔:

sudo nano /etc/apt/preferences

在其中輸入:

Package: *
Pin: release n=wheezy
Pin-Priority: 900
Package: *
Pin: release n=jessie
Pin-Priority: 300
Package: *
Pin: release o=Raspbian
Pin-Priority: -10

更新套件清單:

sudo apt-get update

從Jessie資源庫安裝gcc/g++ 4.8:

sudo apt-get install -t jessie gcc-4.8 g++-4.8

若要移除gcc/g++ 替代軟體設置(如果有的話,預設是沒有),請執行:

sudo update-alternatives --remove-all gcc
sudo update-alternatives --remove-all g++

安裝替代軟體(alternatives):

sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.6 20
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 50
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.6 20
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.8 50

現在,4.8就變成預設的編譯器,你可以透過底下的命令確認:

sudo gcc --version

接著就可以嘗試編譯Node.js原始碼了。

假如要改變此設定,你可以執行:

sudo update-alternatives --config gcc
sudo update-alternatives --config g++
Posts created 467

6 thoughts on “在Raspberry Pi編譯與安裝最新版Node.js

  1. 老師請問一下
    我在輸入這邊的指令的時候
    sudo update-alternatives –install /usr/bin/gcc gcc /usr/bin/gcc-4.6 20
    sudo update-alternatives –install /usr/bin/gcc gcc /usr/bin/gcc-4.8 50
    sudo update-alternatives –install /usr/bin/g++ g++ /usr/bin/g++-4.6 20
    sudo update-alternatives –install /usr/bin/g++ g++ /usr/bin/g++-4.8 50

    出現 update-alternatives :–install 要有
    use ‘ update-alternatives–help’ for program usage information
    在做上面的步驟都可以但是這邊發現問題

    我是使用pi3

    1. Node.js官網已經有提供事先編譯好的ARM版本,可直接給Raspberry Pi使用。例如,底下網址包含已編譯好的Node.js全部版本:

      https://nodejs.org/dist/

      例如,其中的”latest-v4.x”路徑代表「最新4.x版」,適用於Raspberry Pi的是檔名以armv71結尾的檔案。

      以下載、安裝4.7.2版為例,請在終端機視窗輸入下列命令(#號與後面的文字代表註解,不用輸入):

      wget https://nodejs.org/dist/latest/node-v4.7.2-linux-armv7l.tar.gz    # 下載檔案
      tar -xvf node-v4.7.2-linux-armv7l.tar.gz        # 解壓縮
      cd node-v4.7.2-linux-armv7l    # 切換到目錄
      sudo cp -R * /usr/local/     # 複製所有檔案到 /usr/local/ 路徑
      

      最後,重新啟動樹莓派。

      thanks,
      jeffrey

  2. CUBIE的留言很有用. 已成功由4.8轉成8.8版本.

    另外, 如要跟CUBIE的安裝方法, 請先行解裝現有版本, 例如:-
    sudo apt-get remove nodejs 及 sudo apt autoremove

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

Related Posts

Begin typing your search term above and press enter to search. Press ESC to cancel.

Back To Top