使用 pnpm workspace 管理微服务
微服务项目建议使用 pnpm workspace 而非 NestJS Monorepo 来管理。原因:
- 每个微服务可以独立启动和测试
- 不需要把所有项目同时运行起来
- 修改某个微服务时只需要关注那个项目
初始化项目
# 创建项目根目录
mkdir microservices && cd microservices
# 初始化 package.json
pnpm init
# 创建 pnpm-workspace.yaml
cat > pnpm-workspace.yaml << 'EOF'
packages:
- 'services/*'
- 'shared'
EOF
# 创建目录结构
mkdir -p services shared/proto shared/certs shared/generated
bash
创建第一个微服务
# 使用 NestJS CLI 创建用户微服务
cd services
nest new user-service --strict
# 或使用 SWC 编译器(更快)
nest new user-service --builder swc
bash
VSCode 插件推荐
vscode-proto3
用于在 VSCode 中编辑 .proto 文件,提供语法高亮、代码补全和格式化。
安装:在 VSCode 扩展市场搜索 vscode-proto3
功能:
- proto3 语法高亮
- 代码片段自动补全(输入
service、message等关键字自动生成模板) - 右键格式化 proto 文件
- 支持
import路径提示
配置(.vscode/settings.json):
{
"protoc": {
"options": [
"--proto_path=${workspaceRoot}/shared/proto"
]
},
"[proto3]": {
"editor.defaultFormatter": "zxh404.vscode-proto3",
"editor.formatOnSave": true
}
}
json
其他推荐插件
| 插件 | 用途 |
|---|---|
| vscode-proto3 | Proto 文件语法支持和代码补全 |
| Proto Lint | proto 文件语法检查 |
| Docker | 容器管理和 Dockerfile 支持 |
| REST Client | 直接在 VSCode 中测试 RESTful API |
| Thunder Client | API 测试工具 |
微服务的 package.json 配置
{
"name": "@microservices/user-service",
"version": "1.0.0",
"scripts": {
"build": "nest build",
"start:dev": "nest start --watch",
"start:prod": "node dist/main",
"proto:generate": "protoc --plugin=protoc-gen-ts_proto=../../node_modules/.bin/protoc-gen-ts_proto --ts_proto_out=../../shared/generated -I ../../shared/proto ../../shared/proto/user.proto"
}
}
json
多服务同时开发
使用 concurrently 同时启动多个服务进行本地调试:
// 根 package.json
{
"scripts": {
"dev": "concurrently \"pnpm --filter user-service dev\" \"pnpm --filter gateway dev\"",
"dev:all": "concurrently \"pnpm --filter user-service dev\" \"pnpm --filter gateway dev\" \"pnpm --filter order-service dev\""
}
}
json
↑