Skip to content

Nest.js

简介

通过脚手架npx @nestjs/cli new创建的项目基本上都是引导 typescript starter 项目,可能有点臃肿了。我们希望从头开始创建一个新的 NestJS 标准应用程序,并且完全控制依赖项、脚本和源代码。

工具

  • nodejs,它是一个JavaScript运行时(Node.js v20 是最低要求)
  • npm,包管理器
  • npx,用于执行 npm 包中的一些工具
  • shell,终端,根据个人喜好

最终的项目结构:

bash
.
├── nest-cli.json
├── package.json
├── package-lock.json
├── src
   ├── app.module.ts
   └── main.ts
├── tsconfig.build.json
└── tsconfig.json

1 directory, 7 files

具有 4 个开发依赖项和 4 个生产依赖项。而且只有 3 个 NPM 脚本。

bash
$ npm ls --depth=0
[email protected] /tmp/my-nestjs-app
├── @nestjs/[email protected]
├── @nestjs/[email protected]
├── @nestjs/[email protected]
├── @nestjs/[email protected]
├── @nestjs/[email protected]
├── @types/[email protected]
├── [email protected]
└── [email protected]

初始化

bash
mkdir my-nestjs-app

cd my-nestjs-app

npm init -y

依赖安装

将安装所有必需的依赖项,作为开发/生产依赖项,我们需要:

bash
npm install reflect-metadata @nestjs/common @nestjs/core
																
npm install @nestjs/platform-express

reflect-metadata 用于 TypeScript 装饰器的内省(即通过装饰器获取类、方法、属性等元数据的机制)

@nestjs/platform-express 由于我们将使用 express 作为底层 HTTP 库:

开发依赖项

bash
npm install --save-dev typescript @types/node @nestjs/cli @nestjs/schematics

配置 package.json

json
{
  "name": "my-nestjs-app",
  "version": "1.0.0",
  "main": "dist/src/main",
  "scripts": {
    "build": "nest build",
    "start:dev": "nest start --watch",
    "start:prod": "node ."
  },
  "keywords": [],
  "author": "Micael Levi L. C.",
  "license": "ISC",
  "description": "",
  "dependencies": {
    "@nestjs/common": "^11.0.3",
    "@nestjs/core": "^11.0.3",
    "@nestjs/platform-express": "^11.0.3",
    "reflect-metadata": "^0.2.2"
  },
  "devDependencies": {
    "@nestjs/cli": "^11.0.0",
    "@nestjs/schematics": "^11.0.0",
    "@types/node": "^22.10.7",
    "typescript": "^5.7.3"
  }
}

必要文件

  • 创建一个带有 NestJS 模块的 src 目录,
  • 根目录中的 tsconfig.json 文件,
  • 根目录中的 tsconfig.build.json 文件,用于编译用于生产的 TypeScript 项目,
  • 根目录中的 nest-cli.json 文件,用于配置 NestJS 的 CLI。
json
// tsconfig.json

{
  "compilerOptions": {
    "module": "commonjs",
    "declaration": true,
    "removeComments": true,
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "allowSyntheticDefaultImports": true,
    "target": "ES2024",
    "sourceMap": true,
    "outDir": "./dist",
    "rootDir": "./",
    "baseUrl": "./",
    "skipLibCheck": true,
    "incremental": true
  }
}
json
// tsconfig.build.json

{
  "extends": "./tsconfig.json",
  "exclude": ["node_modules", "test", "dist", "**/*spec.ts"]
}
json
// nest-cli.json

{
  "\$schema": "https://json.schemastore.org/nest-cli",
  "collection": "@nestjs/schematics",
  "monorepo": false,
  "sourceRoot": "src",
  "entryFile": "main",
  "language": "ts",
  "generateOptions": {
    "spec": false
  },
  "compilerOptions": {
    "tsConfigPath": "./tsconfig.build.json",
    "webpack": false,
    "deleteOutDir": true,
    "assets": [],
    "watchAssets": false,
    "plugins": []
  }
}
bash
 # 创建一个最小化的应用根模块
npx nest generate module app --flat
ts
// src/main.ts

import { NestFactory } from '@nestjs/core';
import type { NestExpressApplication } from '@nestjs/platform-express';
import { AppModule } from './app.module';

async function bootstrap() {
  const app = await NestFactory.create<NestExpressApplication>(AppModule);
  await app.listen(process.env.PORT || 3000);
}
bootstrap();

运行应用

对于开发:

bash
npm run start:dev

对于生产:

bash
npm run build

rm -rf node_modules
## 在不修改锁文件的情况下安装仅用于生产环境的依赖项
npm ci --omit=dev
## 使用 “main” 入口启动应用程序
node .

最后更新时间:

如有转载或 CV 的请标注本站原文地址