Rush Stack商店博客活动
跳至主要内容

Node.js 服务插件

插件包@rushstack/heft (内置)
插件名称node-service-pluginNodeServicePlugin.ts 实现
插件配置文件node-service.json
heft.json 选项(无)

此插件支持使用 Heft 开发 Node.js 服务。它允许 heft start 在 **localhost** 端口上启动您的服务。每当您保存对源代码的更改时,项目将被重建,然后服务将被重启。

此功能类似于独立启动器,例如 nodemonnode-dev。它们也可以与 Heft 一起使用,但是 node-service 任务的好处是它可以 riggable 并且更好地与 Heft 的工作流程集成。

何时使用它

如果您的项目是 Node.js 服务,请使用此插件。它已针对以下流行框架进行了测试

  • Express - 传统的“无观点”Node.js 框架,具有最小的结构和非常庞大的社区插件生态系统
  • Fastify - 在特征上类似于 Express,但具有改进的验证和更多核心组件
  • HapiJS - 一个优秀的“包含电池”框架,建立在官方维护组件的综合基础之上
  • NestJS - 一个流行的框架,提供付费企业支持和使用 emitDecoratorMetadata 的重量级抽象系统

**安全注意事项:** 与 Web 浏览器应用程序不同,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"

启动服务

要启动 localhost 开发服务器,请使用 heft start 命令,该命令通常被定义为 heft build-watch --serve 的别名(请参见上面的 aliasesByName)。每当您保存对源文件的更改时,Heft 的监视模式将重新编译您的项目,然后自动停止服务进程并重新启动它。

**注意:** 如果 --serve 参数包含在 Heft 命令行中,那么 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.