nest 项目初始化
2024年7月24日...大约 3 分钟
nest 项目初始化、工程目录调整、cli 命令使用
项目初始化
npm i -g @nestjs/cli
nest new project-name
# 使用 pnpm
# 启动并热更
npm run start:dev
工程目录
来自 nestjs基础目录结构-掘金 ,这个结构比较符合我的思路,就先用这个了,记得之前有个公司项目是用的 nestjs ,但是没找到了
nodejs
├── package.json
├── README.md
├── src
│ │ └── constants(全局常量定义)
│ │ ├──common.constants.ts
│ │ └── utils(常用工具类)
│ │ ├──http.util.ts
│ │ └──file.util.ts
│ ├── app.module.ts(模块配置文件)
│ ├── common (通用模块,包含自定义装饰器、过滤器、守卫、拦截器、中间件)
│ │ ├── decorators (项目通用装饰器)
│ │ │ └── roles.decorator.ts
│ │ ├── filters (过滤器)
│ │ │ └── http-exception.filter.ts
│ │ ├── guards (守卫)
│ │ │ └── roles.guard.ts
│ │ ├── interceptors (拦截器)
│ │ │ ├── exception.interceptor.ts
│ │ │ ├── logging.interceptor.ts
│ │ ├── middleware (中间件)
│ │ │ └── logger.middleware.ts
│ │ └── pipes (管道,主要用于数据验证和类型转换)
│ │ ├── parse-int.pipe.ts
│ │ └── validation.pipe.ts
│ ├── config (配置文件信息)
│ │ ├── database.ts
│ │ ├── redis.ts
│ ├── jobs (高并发场景下队列处理)
│ ├── main.ts (入口文件)
│ ├── modules (业务代码,按目录区分模块)
│ │ ├── hello
│ │ │ ├── hello.controller.ts
│ │ │ ├── hello.module.ts
│ │ │ └── hello.service.ts
│ │ └── users
│ │ │ ├── dto (数据传输对象定义)
│ │ │ │ └── users.create.dto.ts
│ │ │ │ └── users.update.dto.ts
│ │ ├── users.controller.ts (控制层)
│ │ ├── users.entity.ts (映射数据库模型对象)
│ │ ├── users.module.ts (模块定义)
│ │ └── users.service.ts (service层)
│ ├── tasks (定时任务)
│ │ ├── tasks.module.ts
│ │ └── tasks.service.ts
│ └── templates (页面模板)
├── test (单元测试)
│ ├── app.e2e-spec.ts
├── tsconfig.json
cli 命令使用
可以通过使用 cli 的命令来生成模块、service 等文件,生成后还会自动更新引用,所以蛮好用的,一般是先生成 module 然后生成 controller 和 service ,不知道为啥没有生成 model 的命令捏。先使用 nest g --help
来查看一下用法
Usage: nest generate|g [options] <schematic> [name] [path]
Generate a Nest element.
Schematics available on @nestjs/schematics collection:
┌───────────────┬─────────────┬──────────────────────────────────────────────┐
│ name │ alias │ description │
│ application │ application │ Generate a new application workspace │
│ class │ cl │ Generate a new class │
│ configuration │ config │ Generate a CLI configuration file │
│ controller │ co │ Generate a controller declaration │
│ decorator │ d │ Generate a custom decorator │
│ filter │ f │ Generate a filter declaration │
│ gateway │ ga │ Generate a gateway declaration │
│ guard │ gu │ Generate a guard declaration │
│ interceptor │ itc │ Generate an interceptor declaration │
│ interface │ itf │ Generate an interface │
│ library │ lib │ Generate a new library within a monorepo │
│ middleware │ mi │ Generate a middleware declaration │
│ module │ mo │ Generate a module declaration │
│ pipe │ pi │ Generate a pipe declaration │
│ provider │ pr │ Generate a provider declaration │
│ resolver │ r │ Generate a GraphQL resolver declaration │
│ resource │ res │ Generate a new CRUD resource │
│ service │ s │ Generate a service declaration │
│ sub-app │ app │ Generate a new application within a monorepo │
└───────────────┴─────────────┴──────────────────────────────────────────────┘
Options:
-d, --dry-run Report actions that would be taken without writing out results.
-p, --project [project] Project in which to generate files.
--flat Enforce flat structure of generated element.
--no-flat Enforce that directories are generated.
--spec Enforce spec files generation. (default: true)
--spec-file-suffix [suffix] Use a custom suffix for spec files.
--skip-import Skip importing (default: false)
--no-spec Disable spec files generation.
-c, --collection [collectionName] Schematics collection to use.
-h, --help Output usage information.
直接使用 nest g mo travel 是会在 src 下生成travel 目录,然后在 travel 目录中有 travel.module.ts 文件和 spec 文件,可以通过添加参数 --flat --no-spec
来不生成目录和 spec 文件,我这里是全局都需要,所以直接在 nest-cli.json 中添加设置(但是加了不好使啊=_=):
"generateOptions": {
"spec": false,
"flat": false
},
生成路径没找到配置的方法,只能是先 cd 到 modules 目录下再执行生成命令 nest g res travel
(生成一整个module),但是这样就不会自动往 app.module.ts 上更新了,得手动添加,应该是有办法的,只是目前我没发现,等发现再更新吧