Node.js 服務外掛
外掛套件 | @rushstack/heft(內建) |
外掛名稱 | node-service-plugin 已由 NodeServicePlugin.ts 實作 |
外掛設定檔 | node-service.json |
heft.json 選項 | (無) |
此外掛協助您使用 Heft 來開發 Node.js 服務。它讓 heft開始
在**本機**連接埠上啟動您的服務。每當您儲存您的原始碼變更時,專案將會重建,然後服務將會重新啟動。
此功能與獨立啟動器相似,例如 nodemon 或 node-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
。
組態
如果你使用標準的 @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"
}
}
}
},
. . .
}
}node-service
外掛程式會尋找 config/node-service.json 組態檔。預設值對多數情況而言都行得通,所以這個檔案可能大多數都是空的。在你的 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.