使用 PM2 的轉譯器

使用 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,以便在解釋所需腳本之前先進行轉譯(例如 babelcoffee)。

此變通方法可被視為一種技巧,而非實際的解決方案。請記住,它會降低腳本的啟動速度。

若要讓它運作,請準備一個純 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 解譯器,因此集群模式將如預期般運作。

為此頁面做出貢獻