Node.js 服务插件
插件包 | @rushstack/heft (内置) |
插件名称 | node-service-plugin 由 NodeServicePlugin.ts 实现 |
插件配置文件 | node-service.json |
heft.json 选项 | (无) |
此插件支持使用 Heft 开发 Node.js 服务。它允许 heft start
在 **localhost** 端口上启动您的服务。每当您保存对源代码的更改时,项目将被重建,然后服务将被重启。
此功能类似于独立启动器,例如 nodemon 或 node-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
中。
配置
如果您使用标准 @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"
。
启动服务
要启动 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.