在上一篇文章中,我们讨论了为什么选择 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 都提供了啥命令
创建一个新的 NestJS 项目
nest new project-name
其中 project-name 是你想要创建的项目名称。执行命令后,CLI 会提示你选择包管理工具(npm 或 yarn),选择完成后,Nest CLI 会自动生成项目结构并安装所需的依赖。
有这么几个选项:
生成模块、控制器和服务
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 也有不少选项:
--flat 和 --no-flat 是指定是否生成对应目录的
--spec 和 --no-spec 是指定是否生成测试文件
--skip-import 是指定不在 AppModule 里引入
启动开发服务器
完成模块、控制器和服务的生成后,我们可以启动 NestJS 开发服务器:
nest start
默认情况下,NestJS 应用会在 http://localhost:3000 上运行。可以通过浏览器访问这个地址,看到“Hello World!”的欢迎页面。
它有这些选项:
--watch 是最常用的选项了,也就是改动文件之后自动重新 build
构建项目
执行 nest build,会在 dist 目录下生成编译后的代码:
nest build
同样,它也有一些选项:
--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 配置文件中进行设置,如 generateOptions 和 compilerOptions,进一步简化命令使用。