標籤:

Node.js伺服器端項目怎麼打包成單文件?

react/vue等前端項目都有現成的腳手架用來打包壓縮js代碼,koa/express/eggjs有類似的方案嗎?


謝邀,可以試下前阿里大神 Node.js Collaborator @潘旻琦 發起的開源項目:

enclose.io - Compiling your application into a single executable

主要的場景:

  • 分發,尤其是 win 上的各種兼容性問題
  • 代碼保密

回答 webpack 的同學,想想你的 node_modules 怎麼辦?如果還有個 sass 之類的 C++ Addons 模塊呢?

PS:和另一個 enclosejs 不是一個庫,不要選錯了~


為什麼要打包?價值和意義何在?

前端打包的目的是為了減少請求數量,提升網頁載入速度。對於node而言,並沒有這個需求,而且本身require有緩存機制,打包到一起也並不會對模塊查找速度有什麼特別明顯的提升。相反地,因為require是按需載入,強行打包到一起反倒把一些可能不執行的代碼載入進來,造成浪費。

所以,除了一些特殊的考慮,如便於分發與安裝,以及代碼保密等層面的問題,一般不太需要打包。


nexe可以打包單文件,

大家的回答都針對於,koa/express/eggjs運行在伺服器,

而題主並未說明,一定會運行在伺服器,所以可能有如下的場景

在外工作,沒有網路,或者只有移動數據的情況下,

無法進行大量數據的傳輸,

需要把數據保存到本地,到有網路的時候,再上傳數據.

一般情況都會有一個客戶端,

但考慮到,web開發的速度,和瀏覽器的跨平台特性,

或許這樣的方案,也很不錯.

但就要考慮到 @天豬(劉勇) 提到的,分發和代碼加密問題,


我嘗試過打包 express 項目,使用 webpack 配置類似,指定一個入口文件就可以了。我使用打包的原因主要是配合 pm2 一起,webpack 監聽文件變更,輸出打包文件,pm2 監聽 webpack 的打包文件變更從而自動重啟。不知道有沒有其他更好的方式,反正這種方式對自己的項目可行


推薦閱讀:

如何在Node.js或TypeScript中實現for..of形式的按行讀文件?
js中Async/Await 怎麼做錯誤處理更好?
GitHub上有哪些值得關注學習的NodeJS開源項目?
node.js 入門請推薦本好的入門書籍?

TAG:Nodejs | webpack |