脚手架的能力
Nest基于TypeScript编写并且结合了 OOP(面向对象编程),FP(函数式编程)和 FRP (函数式响应编程)的相关理念。在设计上的很多灵感来自于 Angular,Angular 的很多模 式又来自于 Java 中的 Spring 框架,依赖注入、面向切面编程等,所以我们也可以认为: Nest 是 Node.js 版的 Spring 框架
Nest 框架底层 HTTP 平台默认是基于 Express 实现的,所以无需担心第三方库的缺失。 Nest 旨在成为一个与平台无关的框架
脚手架
可以快速帮我们生成一个基本的 nestjs 项目
$ nest new project-name
看下 nest cli 的命令

其实项目骨架的生成是通过 @nestjs/schematics 实现的,这个包包含了通过 cli 命令生成所有模块和模块目录的模版

可以看出,使用 nest new xxx 生成的项目模板就是 @nestjs/schematics 的 application 模块的模板
常用的 generate 命令
controller(简写 co)
在 src 目录下创建一个 xxx Controller,并在 appModule controllers 引入
$ nest g co user

service
在 src 目录下创建一个 xxx Service, 并在 appModule services 引入
$ nest g service user

module
在 src 目录下创建一个 xxx Module, 并在 appModule imports 引入
$ nest g module user

resource
创建一组功能模块,一般我们会用这种方式来快速创建一个功能模块,会在 appModule imports 引入整个 module
$ nest g resource login

generate 的 options
- --no-spec 和 --spec 是否测试文件,默认生成测试文件
- --flat 和 --no-flat 是指定是否生成对应目录的,默认会生成目录,然后 再目录里生成对应文件
- --skip-import 指定不在 AppModule 里引入,默认会在 AppModule 中引入
- --project 指定生成的文件在哪个子目录
这些 options 都可以在 cli 的配置文件里指定
{
"generateOptions": {
"spec": false,
"flat": false
}
}
nest build
看下 options

--pathts 配置文件的路径--webpack使用 webpack 打包,打包产物是一个 bundle (main.js)--tsctsc 只是将 ts 代码转为 js 代码,不打包代码--watch监听文件变动,自动 build--config指定 nest cli 的配置文件路径
上面这些选项其实都可在 nest-cli.json 中的 complierOptions 里进行配置
{
// 详细的配置说明
"$schema": "https://json.schemastore.org/nest-cli",
"collection": "@nestjs/schematics",
// 代码根目录
"sourceRoot": "src",
// 编译的配置
"compilerOptions": {
"webpack": true,
"watchAssets": false,
// tsc build 配置文件路径
"tsConfigPath": "tsconfig.build.json",
// 每次打包删除 dist 目录
"deleteOutDir": true,
// 哪些文件可以复制到打包目录里
"assets": [
"**/*.css",
{
"include": "**/*.html",
"exclude": "**/test.html",
"watchAssets": true
}
]
}
}