使用 PM2 的轉譯器
生產方式
如果您想分享、組合、封裝或部署您的程式碼庫,通常最好使用純舊 Javascript (VanillaJS)。這表示您將擁有您的程式碼的預處理版本,然後您將執行 Javascript 進入點。
例如,通常的目錄結構會如下所示
├── src
├── dist
└── package.json
其中 src
包含 es6、coffeescript 或其他,而 dist
是轉譯後的 Javascript。這現在很容易使用 PM2 設定,因為它將在沒有任何組態的情況下啟動 Javascript。
但是,在撰寫程式碼時,可能會讓組態更困難。假設您想要觀察和重新啟動。您必須觀察、轉譯和重新啟動。PM2 不是建置系統也不是任務執行器,因此我們建議您優先選擇第二種方式。
開發方式
即使我們不建議,這可能在生產工作流程中運作良好。組合程式碼更安全,這將使指令碼啟動過程變慢,並且叢集模式可能不可用。
執行直譯器
在 PM2 中使用轉譯器的最簡單方法是覆寫執行直譯器 (exec_interpreter
)。請注意,如果這已變更,您的程式碼將僅在 fork_mode
中運作 (在此處查看 fork 模式之間的差異)。
要執行此操作,請透過 CLI 指定 --interpreter
選項,或透過 json 組態指定 exec_interpreter
選項。
Coffee-script
#- npm install -g coffee-script
#- pm2 start --interpreter coffee index.coffee
只要加入 --watch
,即可讓 daemon 化的 coffee script 在檔案變更時重新啟動。
Babel
#- npm install -g babel-cli
#- pm2 start --interpreter babel-node index.es6
請記住,這些指令只會在 fork_mode
中運作。如果您想執行 PM2 集群,請參閱以下替代方案。
Require hook
這是我的最愛選項。它會在程式碼中註冊轉譯器,並以標準 Javascript 執行。其中大多數實際上會變更 node 內部的 require
,或調整 module
,以便在解釋所需腳本之前先進行轉譯(例如 babel 或 coffee)。
此變通方法可被視為一種技巧,而非實際的解決方案。請記住,它會降低腳本的啟動速度。
若要讓它運作,請準備一個純 Javascript 的進入點,它會在包含未轉譯的來源之前呼叫 require hook。
Coffee-script
# server.js
require('coffee/register');
require('./server.coffee');
Babel
require('babel-register');
require('./server.es6');
查看 babeljs 文件 以取得更多選項。
然後,您所要做的就是啟動腳本 pm2 start server.js
。由於這將使用 node
解譯器,因此集群模式將如預期般運作。