CLI

安装

全局安装 nestjs 的 cli

bash
1-- pnpm
2pnpm install -g @nestjs/cli
3-- npm
4npm install -g @nestjs/cli

起项目

bash
1nest new 项目名

为了每次建项目都拿到最新的 nestjs 版本,需要经常更新全局 cli 版本:

bash
1npm update -g @nestjs/cli

查看所有 cli 命令

bash
1nest -h

生成代码

生成 module 代码

bash
1nest generate module <module name>

得到结果:

bash
1CREATE src/user/user.module.ts (81 bytes)
2UPDATE src/app.module.ts (308 bytes)

生成的代码可能是这样的:

tsx
1import { Module } from '@nestjs/common'
2
3@Module({})
4export class UserModule {}

该 Module 会自动被 app.module.ts引入:

image-20230927200700249

除了 Module 外,还有后端开发中常用来做逻辑分离的 Controller 层和 Service 层都可以生成:

bash
1nest generate controller <controller name>
2nest generate service <service name>

同样的,上面生成的代码会自定引入到 app.module.ts中,分别对应 controllersproviders

还有一个命令可以生成一个完整模块的代码:

bash
1nest generate resource <name>

这个命令会提示你想要哪些风格的模块代码:

bash
1 What transport layer do you use? (Use arrow keys)
2❯ REST API
3  GraphQL (code first)
4  GraphQL (schema first)
5  Microservice (non-HTTP)
6  WebSockets

还能够提示你是否想要生成一些 CRUD 的预设代码:

bash
1Would you like to generate CRUD entry points? (Y/n)

当选择是之后,就会帮助你生成整个模块的代码,包括 CRUD 的一些预设以及测试代码:

image-20230927202024498

完整的模块也会注入到app.module.ts中。

后端可以自动生成的代码非常多,使用nest generate -h可以看到能够生成的代码列表:

image-20230927202606481

后期根据需要生成即可。

build

nest build用来构建项目。

执行 nest build,会在 dist 目录下生成编译后的代码。

通过nest build -h,可以看到有下列选项:

bash
1Options:
2  -c, --config [path]    Path to nest-cli configuration file.
3  -p, --path [path]      Path to tsconfig file.
4  -w, --watch            Run in watch mode (live-reload).
5  -b, --builder [name]   Builder to be used (tsc, webpack, swc).
6  --watchAssets          Watch non-ts (e.g., .graphql) files mode.
7  --webpack              Use webpack for compilation (deprecated option, use --builder
8                         instead).
9  --type-check           Enable type checking (when SWC is used).
10  --webpackPath [path]   Path to webpack configuration.
11  --tsc                  Use typescript compiler for compilation.
12  --preserveWatchOutput  Use "preserveWatchOutput" option when using tsc watch mode.
13  -h, --help             Output usage information.

其中--webpack--tsc是指定用什么生成编译后的代码。

其中 webpack 会做打包,而 tsc 则是将 ts 编译成 js。

默认情况下是 ts 编译,两种方式生成的代码都可以用来发布。

--watch 是监听文件变动,自动 build 的。

但是 --watch 默认只是监听 ts、js 文件,加上 --watchAssets 会连别的文件一同监听变化,并输出到 dist 目录,比如 md、yml 等文件。

--path 是指定 tsc 配置文件的路径的。

那 --config 是指定什么配置文件呢?

是 nest cli 的配置文件。

nest-cli.json

所有 cli 选项都可以在nest-cli.json中配置。

img

比如 compilerOptions 里设置 webpack 为 true 就相当于 nest build --webpack。

webpack 设置为 false 就是用 tsc 了。

deleteOutDir 设置为 true,每次 build 都会都清空 dist 目录。

而 assets 是指定 nest build 的时候,把那些非 js、ts 文件也复制到 dist 目录下。

可以通过 include、exclude 来精确匹配,并且可以单独指定是否 watchAssets。

不过只支持 src 下文件的复制。

然后是 generateOptions,这些就和我们 nest generate 时的 --no-spec、--no-flat 一样的效果。

start

nest start用来在服务端中生成并 run 这些代码服务。

它有以下重要选项:

  1. --watch 修改文件后自动 build
  2. --debug 是启动调试的服务
  3. --exec 可以指定用什么来跑,默认是用 node 跑,你也可以切换别的 runtime。

还有一些其他的选项跟 build 差不多,这里就不做扩展,

info

执行 nest info 命令可以看到当前项目用的版本信息、npm 信息等。

bash
1[System Information]
2OS Version     : macOS Unknown
3NodeJS Version : v16.15.0
4PNPM Version    : 7.15.0
5
6[Nest CLI]
7Nest CLI Version : 10.1.18
8
9[Nest Platform Information]
10platform-express version : 10.2.6
11mapped-types version     : 2.0.2
12schematics version       : 10.0.2
13testing version          : 10.2.6
14common version           : 10.2.6
15core version             : 10.2.6
16cli version              : 10.1.18

总结

nest-cli 有很多命令,这些命令可以:

  1. 生成代码
  2. 编译代码
  3. 监听文件变动
  4. 获取项目信息

这些都是框架内置的命令,能够大大简化开发的难度。