Nx和Angular CLI命令行
Nx支持Angular开发功能,当运行nx build myapp并且myapp使用Angular Devkit实现的构建目标时,Nx的作用与Angular CLI完全相同。当再次使用nx g component mycmp时,Nx将调用相同的原理图,其运行速度要比原生的Angular快得多。因此可以把Nx理解为包装了Angular CLI命令,但是运行更快的命令行。
Nx是如何做到的
这是因为Nx CLI使用了高级代码分析和计算缓存来在可能的情况下重用以前的计算结果。而Angular CLI不会这样做。Nx CLI还支持比 Angular CLI更多的命令。它可以针对多个项目并行运行目标,针对项目及其依赖项运行目标,等等。
装饰Angular CLI
由于Nx可以完成Angular CLI的所有工作,而在此之上,Nx的所有工作区都有一个decorate-angular-cli.js文件。此文件将重新映射ng为调用nx,但最终仍会调用Angular CLI。换句话说,调用ng将调用经过nx包装的ng版本。
使用Nx管理Nest.js项目
Nest.js是一个旨在构建可伸缩服务器端应用程序的框架。在许多方面,Angular开发人员对Nest都会感到很熟悉:
- 它具有出色的TypeScript支持。
- 它的依赖注入系统类似于Angular中的依赖注入系统。
- 它强调可测试性。
- 其配置API也类似于Angular。
- Angular应用程序中使用的许多约定和最佳实践也可以在Nest中使用。
安装Nest插件
可以通过以下步骤将Nest插件安装到工作区:
yarn add -D @nrwl/nest
npm install -D @nrwl/nest
应用程序
可以使用以下方法来生成新的应用程序:
nx generate @nrwl/nest:application <nest-app>
这将创建以下应用程序结构:
my-org/
├── apps/
└── nest-app/
├── jest.config.js
├── src/
│ ├── app/
│ │ ├── app.controller.ts
│ │ ├── app.controller.spec.ts
│ │ ├── app.module.ts
│ │ ├── app.service.ts
│ │ └── app.service.spec.ts
│ ├── assets/
│ ├── environments/
│ └── main.ts
├── tsconfig.app.json
├── tsconfig.json
├── tsconfig.spec.json
└── tslint.json
其中,main.ts内容应类似于以下内容:
import { NestFactory } from '@nestjs/core';
import { AppModule } from './app/app.module';
async function bootstrap() {
const app = await NestFactory.create(AppModule);
const globalPrefix = 'api';
app.setGlobalPrefix(globalPrefix);
const port = process.env.port || 3333;
await app.listen(port, () => {
console.log('Listening at http://localhost:' + port + '/' + globalPrefix);
});
}
bootstrap();
应用代理
生成Nest应用程序可以选择配置工作区中的其他项目以代理API请求。可以通过传递前端项目(frontenProject)中你希望启用代理支持的项目名称来完成。
nx generate @nrwl/nest:application <nest-app> --frontendProject my-angular-app
应用程序命令
将Nest应用程序添加到workspace.json(或angular.json)时,以下架构器命令可用于执行:
- buildnx build <nest-app> build命令将使用Webpack编译应用程序。它通过使用以下命令进行构建来支持生产配置:nx build <nest-app> --configuration=production 可以在workspace.json中添加其他配置。--configuration使用新的配置名称更改标志将运行该配置。
- servenx serve <nest-app> serve命令运行build目标,并执行应用程序。
默认情况下,serve命令将在监视模式下运行。这样可以更改代码,并自动重建Nest应用程序。Nest应用程序还inspect设置了标志,因此您可以将调试器附加到正在运行的实例。 - debug
调试设置为使用系统上可用的随机端口。可以通过serve在workspace.json中的构造器中设置port选项来更改端口。或使用来运行serve命令--port <number>``。 有关如何调试Node`应用程序的其他信息,请参见《Node.js调试入门指南》。 - 等待其他构建完成
waitUntilTargets使用一系列项目(具有以下格式:)设置选项project:architect将在提供Nest应用程序之前执行这些命令。 - lint
lint命令将在Nest应用程序的范围内运行linting。nx lint <nest-app> - test
测试将在Nest应用程序的范围内执行Jest测试。nx test <nest-app> - Libraries(库)
库是用来在组织内分离功能的好方法。要创建Nest库,请运行以下命令:nx generate @nrwl/nest:library <nest-lib> 嵌套库也可以使用包含的控制器,服务生成,或通过其各自的标志使模块全局化。nx generate @nrwl/nest:library <nest-lib> [--controller] [--service] [--global] - 可构建的库
还可以使库与应用程序分开构建。要创建可构建的库,请将--buildable标志添加到上面的generate命令中。nx generate @nrwl/nest:library <nest-lib> --buildable
库命令
将Nest库添加到workspace.json(或angular.json)时,以下架构器命令可用于执行:
- lint
lint命令将在Nest库的范围内运行linting。`nx lint `` - test
test将在Nest库的范围内执行Jest测试。nx test <nest-lib>
注意:默认情况下,Nest库是在Jest的测试环境设置为的情况下生成的 node - build
仅当带—buildable标志的库生成时,build命令才可用。
可构建的Nest库使用TypeScript编译源代码。使用该库生成的tsconfig文件允许自定义编译输出。nx build <nest-lib> - Nest Generators
用于Nx的Nest插件扩展了Nest提供的生成器。可以与Nest CLI一起使用的任何命令也可以与该nx命令一起使用。在所有Nest生成器命令中应该使用--sourceRoot标志。
该--sourceRoot命令应指向Nx工作区中的Nest库或应用程序的源目录。