跳到主要内容

脚手架的能力

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 cli

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

@nestjs/schematics

可以看出,使用 nest new xxx 生成的项目模板就是 @nestjs/schematics 的 application 模块的模板

常用的 generate 命令​

controller(简写 co)​

在 src 目录下创建一个 xxx Controller,并在 appModule controllers 引入

$ nest g co user

G CO

service​

在 src 目录下创建一个 xxx Service, 并在 appModule services 引入

$ nest g service user

G Service

module​

在 src 目录下创建一个 xxx Module, 并在 appModule imports 引入

$ nest g module user

G module

resource​

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

$ nest g resource login

G Resource

generate 的 options​

  1. --no-spec 和 --spec 是否测试文件,默认生成测试文件
  2. --flat 和 --no-flat 是指定是否生成对应目录的,默认会生成目录,然后再目录里生成对应文件
  3. --skip-import 指定不在 AppModule 里引入,默认会在 AppModule 中引入
  4. --project 指定生成的文件在哪个子目录

这些 options 都可以在 cli 的配置文件里指定

{
"generateOptions": {
"spec": false,
"flat": false
}
}

nest build​

看下 options

Nest build

  • --path ts 配置文件的路径
  • --webpack 使用 webpack 打包,打包产物是一个 bundle (main.js)
  • --tsc tsc 只是将 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
}
]
}
}