位元詩人 [Node.js] 程式設計教學:用 Nexe 打包 Node.js 應用程式

Facebook Twitter LinkedIn LINE Skype EverNote GMail Yahoo Email

前言

使用 Node.js (JavaScript) 這類高階直譯語言撰寫應用程式相當行雲流水,但要部署到目標系統時,就是另一段故事了。

當我們要部署以直譯語言實作的程式時,得把整個運行環境部署到目標系統上,當然也包括了該應用程式所用到的社群套件。雖然 Node.js 等現代程式語言都有降低部署難度的手段,但若客戶缺乏技術背景的話,建置的過程還是稍嫌麻煩了點。

此外,當我們使用直譯語言實作應用程式時,代表該程式的實作也是一覽無遺。若我們想要保護我們所寫的應用程式的程式碼時,最好還是用打包工具把程式碼包成執行檔。雖然打包這個動作只防麻瓜不防高手,至少我們讓程式使用者窺視程式碼的難度變高。

在本文中,我們介紹以 Nexe 打包 Node.js 應用程式的流程。

系統需求

Nexe 本身是 NPM 套件,所以宿主系統要有 Node.js 及 NPM。如果在使用 Nexe 的過程中想要自行編譯 Node.js 的話,就要按照編譯 Node.js 的系統需求來建置環境。

此外,目標程式最好也包成 NPM 套件,並且確認該套件是可正常運行的。當我們所寫的應用程式有用到社群套件時,Nexe 會從專案中讀取 node_modules 目錄中的程式碼。

使用方式

Nexe 本身以命令列工具的形式發佈,所以得用全域安裝模式來安裝:

$ npm install -g nexe

將工作目錄移動到目標專案所在的根目錄:

$ cd path/to/package

執行 nexe 指令:

$ nexe

nexe 會自動讀取 package.json 中的設定,所以要在專案中設好 main 屬性。

在預設情形下,nexe 會自動匹配宿主系統的 Node.js 版本,並下載預編好的 Node.js 二進位檔。

如果想要自行編譯 Node.js,則改用以下指令:

$ nexe --build

但要編譯 Node.js 本身比較麻煩,要建置編譯 Node.js 的環境。在 Windows 上編譯程式相對比較麻煩。如果無法找到可匹配的 Node.js 環境,其實可指定任一版本即可。參考以下指令:

$ nexe -t windows-x64-12.15.0

使用實例:打包 Express 應用程式

在以下實例中,我們用 Nexe 打包一個 Express 範例程式

$ git clone https://github.com/cwchentw/expressjs-boilerplate
$ cd expressjs-boilerplate
$ npm install
$ npm run prod
$ nexe

在打包完後,可在專案的根目錄取得 app 執行檔。這時候,我們可以把 app 移出專案所在的目錄,甚至把專案刪除,該執行檔仍然可以運作。

根據 Nexe 官網的敘述,nexe 可以把網頁模板等系統資源一併包入執行檔中,有需要的讀者可以試試看。

附記

筆者把自己手邊的 Puppeteer 爬蟲用 Nexe 包成執行檔,但該執行檔仍需要 node_modules 目錄存在才能運作。可能的原因是 Puppeteer 爬蟲內部有用到 Chromium 執行檔。

像 Nexe 這類把直譯語言命令稿打包的程式往往無法 100% 成功,所以我們不能過度依賴打包程式。當我們想製作執行檔時,還是要先考慮編譯語言。打包程式只是一種加分的項目,而非高階直譯語言預設的功能。

關於作者

身為資訊領域碩士,位元詩人 (ByteBard) 認為開發應用程式的目的是為社會帶來價值。如果在這個過程中該軟體能成為永續經營的項目,那就是開發者和使用者雙贏的局面。

位元詩人喜歡用開源技術來解決各式各樣的問題,但必要時對專有技術也不排斥。閒暇之餘,位元詩人將所學寫成文章,放在這個網站上和大家分享。