前端入门后端NestJS(二):nest命令行工具

183 阅读8分钟

在上一节中,我们介绍了Nest服务的基本启动流程,其中涉及到了ModuleControllerService三个主要术语,简单介绍了下它们的含义,并留下了一道思考题。

那么接下来我们是不是要对ModuleControllerService这三者进行详细的介绍呢?别急,工欲善其器必先利其器,在后面的学习中会多次用到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

image-20240425201302624.png

上述这条命令里,nnew的缩写,demo2是项目名称,-g指定跳过了git仓库初始化,-p pnpm指定包管理依赖工具为pnpm-s指定跳过依赖安装这一步,生成的项目文件如下图:

image-20240425201428396.png

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>:生成的文件类型,如 controllerservicemoduleresource等。

  • [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

image-20240603202554670.png

上述这条命令里,我们生成了一个modulecat,我们详细讲解下可选参数的使用:

  • 由于没有指定--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

image-20240603203902873.png

在这个例子中,我们用generate命令生成一个完整的模块dog,这里有三个注意点:

  • 该模块包括了module、controller、service及后两者的测试文件,以及dtoentities文件夹。其中dtoentities文件夹暂时不用理会,后续再讲解。
  • 由于没有指定--flat,因此生成的所有文件都是放在dag文件夹下的。
  • 由于没有指定--spec--no-spec参数,因此会还有controllerservice的测试文件。
  • 由于没有指定--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]:指定编译的工具,如tscwebpackswc等。
    • --type-check:在构建时启用严格的类型检查。
    • --webpackPath [path]:webpack的配置文件路径。
    • --tsc:使用TypeScript编译器,默认选项。
    • --preserveWatchOutput 在监视模式下编译代码时,会保留控制台的输出日志。

这条命令的参数比较简单,我们先过一遍,后续遇到了再详细讲解。

以上便是nest命令行工具的初步内容,对于入门这来说,我们不需要掌握太深,太多的内容反而容易加重心智负担,从而导致放弃,一点点来,坚持下去才是最重要的,加油~