[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% 成功,所以我們不能過度依賴打包程式。當我們想製作執行檔時,還是要先考慮編譯語言。打包程式只是一種加分的項目,而非高階直譯語言預設的功能。

    【分享文章】
    Facebook Twitter LinkedIn LINE Skype EverNote GMail Yahoo Email
    【追蹤網站】
    Facebook Twitter Plurk
    臉書討論區