从零开始学 NestJS(二):掌握 Nest CLI

325 阅读4分钟

在上一篇文章中,我们讨论了为什么选择 NestJS 作为构建现代 Web 应用的框架。本篇文章将重点介绍 Nest CLI,这是 NestJS 的命令行工具,能够帮助我们快速构建、开发和维护 NestJS 应用程序。掌握 Nest CLI 不仅可以提高开发效率,还能让我们更好地管理项目结构。

什么是 Nest CLI?

Nest CLI 是 NestJS 官方提供的命令行工具,用于创建、管理和维护 NestJS 应用程序。它能够帮助开发者自动化许多常见的开发任务,比如生成新的模块、控制器、服务等。通过使用 Nest CLI,开发者可以专注于业务逻辑,而不必担心手动创建文件和设置目录结构。

安装 Nest CLI

通过 npm 安装 Nest CLI:

npm install -g @nestjs/cli

安装完成后,可以通过以下命令检查 CLI 版本:

nest -v

nest -h 看看 nest 都提供了啥命令

image.png

创建一个新的 NestJS 项目

nest new project-name

其中 project-name 是你想要创建的项目名称。执行命令后,CLI 会提示你选择包管理工具(npm 或 yarn),选择完成后,Nest CLI 会自动生成项目结构并安装所需的依赖。

有这么几个选项:

image.png

生成模块、控制器和服务

Nest CLI 使生成模块、控制器和服务变得简单。可以使用以下命令快速生成这些组件。

生成模块

nest generate module users

这将创建一个名为 users 的新模块,并在 src/users 目录下生成 users.module.ts 文件。

生成控制器

nest generate controller users

这将为 users 模块生成一个控制器,文件名为 users.controller.ts

生成服务

nest generate service users

这将为 users 模块生成一个服务,文件名为 users.service.ts

生成完整的功能模块

你还可以通过生成器一次性生成模块、控制器和服务:

nest generate resource users

这会创建一个 users 模块,并同时生成控制器和服务,形成一个完整的功能模块。

nest generate 也有不少选项:

image.png

--flat 和 --no-flat 是指定是否生成对应目录的

--spec 和 --no-spec 是指定是否生成测试文件

--skip-import 是指定不在 AppModule 里引入

启动开发服务器

完成模块、控制器和服务的生成后,我们可以启动 NestJS 开发服务器:

nest start

默认情况下,NestJS 应用会在 http://localhost:3000 上运行。可以通过浏览器访问这个地址,看到“Hello World!”的欢迎页面。

它有这些选项:

image.png

--watch 是最常用的选项了,也就是改动文件之后自动重新 build

构建项目

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

nest build

同样,它也有一些选项:

image.png

--wepback 和 --tsc 是指定用什么编译,默认是 tsc 编译,也可以切换成 webpack。tsc 不做打包、webpack 会做打包,两种方式都可以。

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

但是 --watch 参数仅监听项目中的 .ts.js 文件的变化,编译后自动更新到 dist 目录。如果你想让 NestJS 同时监听项目中的静态资源文件(如 .html.css、图片等),需要在 nest-cli.json 中配置 assets,然后使用 --watchAssets 参数。这样,NestJS 就会监听通过 assets 配置指定的静态文件,并在文件发生变化时将其重新复制到 dist 目录。

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

--config 是指定nest cli 的配置文件。

nest-cli.json

前面说的那些选项都可以在 nest-cli.json 里配置:

{
  "$schema": "https://json.schemastore.org/nest-rcli", 
  "collection": "@nestjs/schematics", 
  
  /* 项目源代码的根目录,通常为 "src" */
  "sourceRoot": "src", 
  
  /* 项目的入口文件,默认是 main */
  "entryFile": "main", 

  /* 和 nest generate 时的 --no-spec、--no-flat 一样的效果 */
  "generateOptions": {
    "spec": false,
    "flat": false
  },

  "compilerOptions": {
    /* 使用 Webpack 进行打包编译,设置 false 就是使用 tsc */
    "webpack": true, 
    
    /* 是否监听静态资源的变化并自动重新编译 */
    "watchAssets": false, 
    
    /* 指定 nest build 的时候,把那些非 js、ts 文件也复制到 dist 目录下 */
    /* 不过只支持 src 下文件的复制,如果是非 src 下的,可以自己写脚本复制 */
    "assets": [{ 
        "include": "*.env", 
        "outDir": "dist",
        /* 单独指定是否监听变化 */
        "watchAssets": true, 
    }],

    /* 指定 TypeScript 编译配置文件的路径,通常为 "tsconfig.build.json" */
    "tsConfigPath": "tsconfig.build.json", 
    
    /* 指定 Webpack 配置文件路径,通常为 "webpack.config.js" */
    "webpackConfigPath": "webpack.config.js", 
    
    /* 每次 build 清空 dist 目录 */
    "deleteOutDir": true
  }
}

总结

NestJS 提供了强大的 CLI 工具 @nestjs/cli,让开发者在项目开发中更加高效。通过 nest 命令,用户可以轻松完成以下任务:

  • 快速创建项目:使用 nest new 命令快速搭建新的 NestJS 项目。
  • 生成代码:使用 nest generate 命令自动生成模块、控制器、服务等代码。
  • 启动开发服务器:使用 nest start 启动服务器,支持文件变更自动编译和调试。
  • 编译和构建:通过 nest build 命令编译 TypeScript 代码,支持 Webpack。

许多选项可以在 nest-cli.json 配置文件中进行设置,如 generateOptionscompilerOptions,进一步简化命令使用。