## 脚本
### Nest CLI和 scripts
本节提供有关 `nest`命令如何与编译器和脚本交互以帮助 `DevOps` 人员管理开发环境的其他背景。
Nest应用程序是标准的 `TypeScript` 应用程序,需要先将其编译为 `JavaScript` 才能执行。有多种方法可以完成编译步骤,并且开发人员/团队可以自由选择最适合他们的方法。考虑到这一点,`Nest` 提供了一系列开箱即用的工具,它们旨在执行以下操作:
- 提供在命令行上可用的标准构建/执行过程,该过程“合理”且具有合理的默认值。
- 确保构建/执行过程是开放的,以便开发人员可以直接访问基础工具以使用本机功能和选项对其进行自定义。
- 保留一个完全标准的 `TypeScript` / `Node.js` 框架,以便可以由开发团队选择使用的任何外部工具来管理整个编译/部署/执行。
通过结合使用 `nest` 命令,本地安装的 `TypeScript` 编译器和 `package.json` 脚本来实现此目标。我们在下面描述这些技术如何协同工作。这应该有助于您了解在构建/执行过程的每个步骤中发生了什么,以及在必要时如何自定义该行为。
### Nest 二进制
`nest` 命令是操作系统级别的二进制文件(即从OS命令行运行)。 该命令实际上包含3个不同的区域,如下所述。 我们建议您通过包运行构建( `nest build` )和执行( `nest start` )子命令。当一个项目被搭建时,会自动提供 `json` 脚本如果您希望通过克隆仓库而不是运行仓库来启动,请参见 [typescript starter](https://github.com/nestjs/typescript-starter))。
### Build
`nest build` 是标准 `tsc` 编译器(用于标准项目)或 `webpack` 编译器(用于 `monorepos` )之上的包装器。它不添加任何其他编译特性或步骤。它存在的原因是,大多数开发人员,特别是在开始使用 `Nest` 时,不需要调整编译器选项((例如 `tsconfig.json` 文件)。
有关更多细节,请参见 `nest build`文档。
### Execution
`nest start` 只是确保已构建项目(与 `nest build` 相同),然后以可移植,简单的方式调用 `node` 命令以执行已编译的应用程序。 与构建一样,您可以根据需要自由定制此过程,可以使用 `nest start` 命令及其选项,也可以完全替换它。 整个过程是标准的 `TypeScript` 应用程序构建和执行管道,您可以自由地管理过程。
有关更多详细信息,请参见 `nest start` 文档。
### Generation
`nest` 生成命令,顾名思义,生成新的 `nest` 项目或其中的组件。
### Package scripts
在 `OS` 命令级别运行 `nest` 命令需要全局安装 `nest` 二进制文件。这是 `npm` 的标准特性,不受 `Nest` 的直接控制。这样做的一个后果是,全局安装的 `nest` 二进制文件在 `package.json` 中没有作为项目依赖项进行管理。例如,两个不同的开发人员可以运行两个不同版本的 `nest` 二进制代码。对此的标准解决方案是使用 `Package` 脚本,以便您可以将构建中使用的工具和执行步骤视为开发依赖项。
运行 `nest new` 或克隆 `typescript starter` 时,`nest` 将填充新项目的包。`Nest` 使用诸如 `build` 和 `start` 之类的命令填充新项目的 `package.json` 脚本。 它还将基础编译器工具(例如 `Typescript` )安装为 `dev` 依赖项。
你运行构建和执行脚本的命令如下:
```bash
$ npm run build
```
和
```bash
$ npm run start
```
这些命令使用 `npm` 的脚本运行功能来执行 `nest` 构建,或者使用本地安装的 `nest` 二进制文件启动 `nest`。通过使用这些内置的包脚本,您可以对 `Nest CLI` 命令*进行完全的依赖管理。这意味着,通过遵循建议的用法,可以确保组织的所有成员都可以运行相同版本的命令。
这适用于构建和启动命令。`nest new` 和 `nest generate` 命令不属于 `build/execute` 管道的一部分,因此它们在不同的上下文中操作,并且不附带内置 `package.json` 脚本。
对于大多数开发人员/团队,建议使用包脚本来构建和执行他们的 `Nest` 项目。您可以通过这些脚本的选项(`—path`、`—webpack`、`—webpackPath`)或根据需要定制 `tsc` 或 `webpack` 编译器选项文件(例如,`tsconfig.json` )来完全定制这些脚本的行为。您还可以自由地运行一个完全定制的构建过程来编译 `TypeScript` (甚至可以直接使用 `ts-node` 执行 `TypeScript` )。
### 向后兼容性
因为 `Nest` 应用程序是纯 `TypeScript` 应用程序,所以以前版本的 `Nest` 构建/执行脚本将继续运行。您不需要升级它们。您可以选择在准备好时利用新的 `nest build` 和 `nest start` 命令,或者继续运行以前的或定制的脚本。
### 迁移
虽然不需要进行任何更改,但您可能希望使用新的 `CLI` 命令进行迁移,而不是使用诸如 `tsc-watch` 或 `ts-node` 之类的工具。在这种情况下,只需在全局和本地安装最新版本的 `@nestjs/cli`:
```bash
$ npm install -g @nestjs/cli
$ cd /some/project/root/folder
$ npm install -D @nestjs/cli
```
然后,您可以用以下脚本替换 `package.json` 中定义的脚本:
```bash
"build": "nest build",
"start": "nest start",
"start:dev": "nest start --watch",
"start:debug": "nest start --debug --watch",
```
- 介绍
- 概述
- 第一步
- 控制器
- 提供者
- 模块
- 中间件
- 异常过滤器
- 管道
- 守卫
- 拦截器
- 自定义装饰器
- 基础知识
- 自定义提供者
- 异步提供者
- 动态模块
- 注入作用域
- 循环依赖
- 模块参考
- 懒加载模块
- 应用上下文
- 生命周期事件
- 跨平台
- 测试
- 技术
- 数据库
- Mongo
- 配置
- 验证
- 缓存
- 序列化
- 版本控制
- 定时任务
- 队列
- 日志
- Cookies
- 事件
- 压缩
- 文件上传
- 流式处理文件
- HTTP模块
- Session(会话)
- MVC
- 性能(Fastify)
- 服务器端事件发送
- 安全
- 认证(Authentication)
- 授权(Authorization)
- 加密和散列
- Helmet
- CORS(跨域请求)
- CSRF保护
- 限速
- GraphQL
- 快速开始
- 解析器(resolvers)
- 变更(Mutations)
- 订阅(Subscriptions)
- 标量(Scalars)
- 指令(directives)
- 接口(Interfaces)
- 联合类型
- 枚举(Enums)
- 字段中间件
- 映射类型
- 插件
- 复杂性
- 扩展
- CLI插件
- 生成SDL
- 其他功能
- 联合服务
- 迁移指南
- Websocket
- 网关
- 异常过滤器
- 管道
- 守卫
- 拦截器
- 适配器
- 微服务
- 概述
- Redis
- MQTT
- NATS
- RabbitMQ
- Kafka
- gRPC
- 自定义传输器
- 异常过滤器
- 管道
- 守卫
- 拦截器
- 独立应用
- Cli
- 概述
- 工作空间
- 库
- 用法
- 脚本
- Openapi
- 介绍
- 类型和参数
- 操作
- 安全
- 映射类型
- 装饰器
- CLI插件
- 其他特性
- 迁移指南
- 秘籍
- CRUD 生成器
- 热重载
- MikroORM
- TypeORM
- Mongoose
- 序列化
- 路由模块
- Swagger
- 健康检查
- CQRS
- 文档
- Prisma
- 静态服务
- Nest Commander
- 问答
- Serverless
- HTTP 适配器
- 全局路由前缀
- 混合应用
- HTTPS 和多服务器
- 请求生命周期
- 常见错误
- 实例
- 迁移指南
- 发现
- 谁在使用Nest?