在上一节中,我们介绍了Nest
服务的基本启动流程,其中涉及到了Module
、Controller
、Service
三个主要术语,简单介绍了下它们的含义,并留下了一道思考题。
那么接下来我们是不是要对Module
、Controller
、Service
这三者进行详细的介绍呢?别急,工欲善其器必先利其器,在后面的学习中会多次用到Nest
的命令行工具,因此我们有必要抽出几分钟学习一下这个命令行工具的使用。
nest
提供的命令里有6个大类,涵盖了:
- 新建:
new | n
- 运行:
start
- 创建模块:
generate| g
- 打包:
build
- 查看项目信息:
info | i
- 添加依赖项:
add
其中,add
命令我们用的比较少,因此这里先暂时不表,感兴趣的同学可以翻翻NestJS
官网。接下来我们就了解下常用的那几个,毕竟我们的目的不是为了记住全部的知识点,而是理解并记住其中的20%,用这20%完成80%的场景的开发工作。
new
第一个是new
命令,这个命令我们在第一节里创建初始Nest
项目的时候用过,其命令的格式如下:
nest new|n [options] [name]
这里补充一下命令行的一些小知识点:竖线
|
标识表示new
可以简写为n
,中括号[]
标识表示options
是可选项。
常用的选用有:-g
、-p
、-s
,剩下的我会以备注的形式补充,大家看一眼即可。
--directory
:用来指定项目的创建路径,默认是当前路径。若指定了路径,则末尾路径将成为文件名。路径不存在时会自动创建。--dry-run
/-d
:指定命令正常执行,但是不会产生任何结果。也就是用来模拟查看某个命令的执行流程的。--language
/-l
:指定nest
应用的脚本语言,可以选择JavaScript
或者TypeScript
,默认是后者。--collection
/-c
:指定nest
应用的collection
集合,我们在第一节里最开始讲解.nest-cli.json
文件的时候提过这个字段。--strict
:指定nest
应用是否使用严格模式,默认不启用。
-g
,即--skip-git
的简写:跳过git
仓库的初始化,即不生成.git
文件夹。-p
,即--package-manager
的简写:指定包管理依赖工具,比如指定包管理工具为npm
或者pnpm
之类的。-s
,即--skip-install
的简写:跳过依赖的安装,即新建项目时不安装依赖,后续再手动安装。
接下来我们结合一个例子来理解下
nest n demo2 -g -p pnpm -s
上述这条命令里,n
是new
的缩写,demo2
是项目名称,-g
指定跳过了git仓库初始化,-p pnpm
指定包管理依赖工具为pnpm
,-s
指定跳过依赖安装这一步,生成的项目文件如下图:
start
通过new
命令新建完项目后,装好依赖,就开始启动服务了。Nest
中启动服务的命令是start
命令,所以接下来我们要了解下这个命令的使用方式。
该命令的格式如下:
nest start [optoins] [app]
其中[app]
这个是可选值,表示项目启动的根路径入口,[options]
表示可选项,而常用的命令参数就只有:-w
。
-w/--watch
,其中-w
是--watch
参数的简写:监听文件的变动并自动刷新,也就是以热更新的模式启动服务。
如果不带任何参数执行nest start
,将只启动服务,且不带有热更新,因此如果改了代码后重新请求发现没有变化,要检查下是不是启动服务时没指定热更新。
以上命令参数在package.json
里的脚本字段scripts
中有,其中start:dev
就是nest start --watch
,平时开发的时候就用start:dev
即可。
其他剩下的参数我们以备注的形式放在下面,现在过一遍即可,以后遇到了再回来查看。
-c/--config [path]
:指定配置文件nest-cli.json
的路径,默认为根路径。-p/--path [path]
:指定tsconfig.json
文件路径。-b/--builder [name]
:在使用monorepo
方式管理多个nest应用时,可以通过该命令指定所需要启动的应用。--watchAssets
:监听静态文件更新,需要在nest-cli.json
中指定静态文件路径。-d/--debug [hostport]
:以debug
模式启动。--webpack
:使用webpack构建应用。--webpackPath [path]
:指定webpack配置文件路径。--type-check
:启用 TypeScript 类型检查。在构建或启动项目时进行严格的类型检查,这可以确保我们的代码没有类型错误。--tsc
:使用 TypeScript 编译器而不是 Webpack 或其他构建工具来编译项目,适合简单的项目。--sourceRoot [sourceRoot]
:指定源代码的根目录。--entryFile [entryFile]
:默认情况下,NestJS 使用main.ts
作为入口文件。如果你的入口文件不同,可以通过这个参数指定。--preserveWatchOutput
:该字段是TypeScript编译器的一个选项,用于保留监视模式下的输出。
这个比较简单,我们就不举例子了。
add
这个命令我们基本用不到,可以先不用管。
generate
这条命令是我们本节的重点,用于生成不同类型的文件和代码模板,如控制器、服务、模块等。其命令格式如下:
nest generate|g <schematic> [name] [options]
其中:
-
<schematic>
:生成的文件类型,如controller
、service
、module
、resource
等。 -
[name]
:生成的文件名或文件路径。可选参数,如果不指定,默认使用schematic
的名称作为文件名。 -
[options]
:可选参数,常用的有如下几个:--flat
:生成的模块以平铺的形式展示,即不放在单独的文件夹里。--no-falt
:生成的模块不以平铺的形式展示,即模块都在单独的一个文件夹内生成。若不指定--flat
和--no-falt
,默认为--no-flat
。--spec
:附带生成测试文件。当生成为文件类型是resource
时,不指定--spec
和--no-spec
时,默认为--spec
,即默认生成测试文件。--no-spec
:不生成测试文件。--skip-import
:指定不在 AppModule 里引入生成的新模块。
剩下的一些可选参数如下:
--dry-run
/-d
:指定命令正常执行,但是不会产生任何结果。也就是用来模拟查看某个命令的执行流程的。(这个参数在new
命令里也有)。--project/-p [project]
:指定生成代码在哪个子项目下,这个在monorepo
项目中会用到。
接下来我们结合几个例子来理解。
例子1:生成单独的文件,或者module文件,或者service文件,或者controller文件。
nest g module cat
上述这条命令里,我们生成了一个module
叫 cat
,我们详细讲解下可选参数的使用:
- 由于没有指定
--flat
,因此生成的cat.module.ts
文件是放在cat
文件夹下的。 - 由于没有指定
--skip-import
,因此生成的cat.module
会被自动引入到app.module.ts
文件里。 - 由于不是生成
resource
,因此--spec
和--no-spec
参数便无需理会。
这里我们引入了一个新的名词:resource
。这里我们稍微解释下,我们用nest g module cat
或者nest g service cat
或者nest g controller cat
的话,生成的都是单独一个文件,那如果我们需要生成完整的一个模块,这时候就需要用nest g resource xxx
了。
例子2:生成完整的模块。
nest g resource dog
在这个例子中,我们用generate
命令生成一个完整的模块dog
,这里有三个注意点:
- 该模块包括了
module、controller、service
及后两者的测试文件,以及dto
、entities
文件夹。其中dto
、entities
文件夹暂时不用理会,后续再讲解。 - 由于没有指定
--flat
,因此生成的所有文件都是放在dag
文件夹下的。 - 由于没有指定
--spec
和--no-spec
参数,因此会还有controller
与service
的测试文件。 - 由于没有指定
--skip-import
,因此生成的dog.module
会被自动引入到app.module.ts
文件里。
以上便是generate
命令的初步应用以及例子讲解,接下来我们看看build
命令。
build
该命令用来编译整个项目,执行build命令,会在dist文件夹下生成编译后文件。其命令格式如下:
nest build [options] [app]
-
[app]
:指定编译的子项目名,在monorepo
项目中会用到。 -
[options]
:可选参数,常用的有如下几个:--config/-c [path]
:nest-cli.json
配置文件位置。--path/-p [path]
:tsconfig.json
配置文件的位置。--watch/-w
:监听文件变动,自动执行build
命令,但是该命令只能监听js、ts文件变动。--watchAssets
:监听静态文件变动,自动执行build命令,可以换配置-w
一起使用。--builder/-b [name]
:指定编译的工具,如tsc
、webpack
、swc
等。--type-check
:在构建时启用严格的类型检查。--webpackPath [path]
:webpack的配置文件路径。--tsc
:使用TypeScript
编译器,默认选项。--preserveWatchOutput
在监视模式下编译代码时,会保留控制台的输出日志。
这条命令的参数比较简单,我们先过一遍,后续遇到了再详细讲解。
以上便是nest命令行工具的初步内容,对于入门这来说,我们不需要掌握太深,太多的内容反而容易加重心智负担,从而导致放弃,一点点来,坚持下去才是最重要的,加油~