Rush 堆疊商店網誌活動
跳至主內容

Node.js 服務外掛

外掛套件@rushstack/heft(內建)
外掛名稱node-service-plugin 已由 NodeServicePlugin.ts 實作
外掛設定檔node-service.json
heft.json 選項(無)

此外掛協助您使用 Heft 來開發 Node.js 服務。它讓 heft開始 在**本機**連接埠上啟動您的服務。每當您儲存您的原始碼變更時,專案將會重建,然後服務將會重新啟動。

此功能與獨立啟動器相似,例如 nodemonnode-dev。這些啟動器也可以搭配 Heft 使用,然而 node-service 任務的優點在於它可以 具備 rig,並與 Heft 的工作流程更佳整合。

何時使用它

如果您的專案為 Node.js 服務,請使用此外掛。已使用以下熱門架構對其進行測試:

  • Express - 簡潔、不拘小節的 Node.js 架構,架構輕巧,擁有龐大的社群外掛生態系
  • Fastify - 特色與 Express 相似,但改進了驗證功能,並多了多組核心元件
  • HapiJS - 完整的良好架構,建立於全面正式維護元件基礎之上
  • NestJS — 一個流行的框架,提供付費企業支援和使用 emitDecoratorMetadata 的重量級抽象系統。

安全性註解:不似網頁瀏覽器應用程式,Node.js 服務通常會執行在受信任資料中心裡,而且可以存取生產資料庫和公司內部服務。且不似開發人員工具,Node.js 服務會自公開網際網路上的惡意用戶接收輸入。仔細查看服務會載入的每個函式庫是個好主意。NPM 套件是誰在維護的?它有在積極開發中嗎?這段程式碼有遵循工程最佳實務嗎?這些問題可能比「它被下載過幾次?」重要。

package.json 相依關係

無 — 這個功能已經內建於 @rushstack/heft

組態

  1. 如果你使用標準的 @rushstack/heft-node-rig,則 node-service-plugin 已經載入並組態好了。否則,你的 heft.json 組態檔 可以像這個範例一樣呼叫它

    <專案資料夾>/config/heft.json

    {
    "$schema": "https://developer.microsoft.com/json-schemas/heft/v0/heft.schema.json",

    "aliasesByName": {
    "start": {
    "actionName": "build-watch",
    "defaultParameters": ["--serve"]
    }
    },
    "phasesByName": {
    "build": {
    "cleanFiles": [{ "sourcePath": "dist" }, { "sourcePath": "lib" }, { "sourcePath": "lib-commonjs" }],
    "tasksByName": {
    "typescript": {
    "taskPlugin": {
    "pluginPackage": "@rushstack/heft-typescript-plugin"
    }
    },
    . . .
    "node-service": {
    "taskDependencies": ["typescript"],
    "taskPlugin": {
    "pluginPackage": "@rushstack/heft",
    "pluginName": "node-service-plugin"
    }
    }
    }
    },

    . . .
    }
    }
  2. node-service 外掛程式會尋找 config/node-service.json 組態檔。預設值對多數情況而言都行得通,所以這個檔案可能大多數都是空的。

  3. 在你的 package.json 檔增加一個包含啟動服務指令的指令碼。這個指令碼的預設名稱為 "serve"。例如

    <專案資料夾>/package.json

      . . .
    "scripts": {
    "build": "heft build --clean",
    "start": "heft start",
    "serve": "node lib/start.js"
    },

如果你的框架使用 fastify-cli 等包裝器,則你的 "serve" 指令可以是 "fastify start ./lib/start.js"

啟動服務

使用 heft start 指令啟動本機開發伺服器,該指令慣例上被定義為 heft build-watch --serve 的別名(請見上方的 aliasesByName)。每當你儲存一個原始碼檔的變更,Heft 的監控模式便會重新編譯你的專案,然後自動停止服務程序並重新啟動它。

註記:如果 Heft 指令列包含 --serve 參數,則 node-service-plugin 就不會執行任何動作,且如果 config/node-service.json 不存在的話,它甚至不會回報錯誤。

偵錯時,你可能偏好使用 VS Code 偵錯器來啟動你的服務

<專案資料夾>/.vscode/launch.json

{
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"type": "node",
"request": "launch",
"name": "Debug the service",
"program": "${workspaceFolder}/lib/start.js",
"args": [],
"console": "integratedTerminal"
}
]
}

VS Code 創建的程序會與 heft start 啟動的程序衝突。若要在這種情況下使用監控模式,請在 --serve 的情況下呼叫 heft build-watch。它會在你變更程式碼時重新編譯你的專案,但不會啟動服務。

CLI 參數

heft/heft-plugin.json 定義了這些參數

  --serve
Start a local web server for testing purposes. This
parameter is only available when running in watch
mode.