这一篇使用 NestJS CLI 初始化项目,详解项目目录结构、核心配置、运行脚本,跑通第一个经典的 Hello World建立对 NestJS 项目的整体认知。
一、项目初始化与整体目录概述
通过NestJS CLI快速初始化空白项目,初始化完成后使用 VS Code 打开工程目录即可开始开发。NestJS 官方预设了标准化的项目目录结构,同时内置了代码规范、格式化、测试等工具,开箱即用。
项目核心目录及工具整体分工清晰,核心结构如下:
src 目录:项目核心源代码存放目录,所有业务代码均在此编写
node_modules 目录:存放项目所有第三方依赖包,自动安装生成
test 目录:项目测试文件目录,用于编写单元测试、端到端(E2E)测试
同时,NestJS 初始化项目默认集成两套开发必备工具:
Jest 测试框架:无需额外配置,支持自动化测试,满足后端项目测试规范要求
ESLint + Prettier:代码规范检查与代码格式化工具,配合 VS Code 对应插件,可实现代码自动校验、统一代码风格,规避不规范代码
二、核心文件与配置详解
NestJS 项目的配置文件各司其职,理解核心文件的作用,是掌握 NestJS 开发的基础。
1. 项目运行核心
nest-cli.json:NestJS 脚手架核心配置文件,用于配置项目编译、构建、CLI 命令相关规则,是项目的核心框架配置
package.json:Node.js 项目标配配置文件,记录项目名称、版本、所有依赖包、自定义运行脚本命令,是项目依赖管理和脚本执行的核心
2. TypeScript 配置文件
tsconfig.json:全局 TypeScript 基础配置,定义项目 TS 编译规则、语法兼容、路径别名等基础配置
tsconfig.build.json:专属构建配置文件,仅在项目打包、编译上线时生效,区别于开发环境的 TS 配置,优化生产构建效率
3. 开源许可证配置
正规开源/商用项目都需要配置开源许可证,NestJS 项目默认可自定义证书协议,主流两种协议区别如下:
MIT 协议:最灵活、使用最广泛的协议,允许项目商业化使用,无强制开源约束,适合绝大多数企业级项目
GPL 协议:具备“传染性”,使用该协议的项目,衍生项目必须强制开源,Linux 系统即采用此协议,商用项目慎用
VS Code 可通过插件快速配置证书:
Choose a License:快速生成项目根目录 LICENSE 文件,一键选择 MIT、GPL 等主流协议
Licenser:支持单个/批量文件头部插入许可证信息,通过命令面板执行
Insert License Header命令即可添加;可在 VS Code 用户配置中预设作者、许可证信息,实现工作区所有文件批量添加证书头部
三、项目运行脚本与启动方式
NestJS 在package.json中预设了三套核心运行脚本,适配开发、调试、生产三种场景,日常开发高频使用。
运行脚本 | 运行场景 | 核心特性 |
|---|---|---|
pnpm start:dev | 开发环境 | 支持文件热更新,修改代码无需重启项目,开发效率最高 |
pnpm start | 生产环境 | 打包编译后启动,性能优化,用于项目上线部署 |
pnpm start:debug | 调试环境 | 开启调试模式,支持断点调试,适配问题排查 |
启动 Hello World 项目
执行开发环境启动命令:pnpm start:dev,项目默认在3000 端口启动。
端口配置核心入口为项目根文件main.ts,文件中app.listen(3000)方法定义了项目监听端口,可根据需求自定义修改。
项目启动成功后,浏览器访问localhost:3000,即可看到默认响应内容:Hello World,至此第一个 NestJS 应用运行成功!
四、src 核心目录结构深度解析
src 是项目的核心业务目录,默认生成三个核心文件,也是 NestJS 模块化架构的基础组成部分,理解这三个文件的分工,就能掌握 NestJS 最核心的开发思想。
app.controller.ts(控制器):负责接收客户端请求、定义路由、返回响应结果,是请求的入口层,所有路由接口都在此定义
app.service.ts(服务层):负责编写核心业务逻辑、数据处理、数据库交互,控制器只负责请求转发,不处理业务逻辑,实现路由与业务解耦
app.module.ts(根模块):项目根模块,是整个应用的结构组织者,统一管理控制器、服务、依赖注入等资源
五、NestJS 核心设计思想:模块化架构
NestJS 框架规定项目所有功能、所有业务逻辑都必须通过模块进行组织和管理。
这种架构模式解决项目代码混乱、耦合度高、难以维护的问题,让代码结构分层清晰、职责单一,极大提升了项目的可维护性、可扩展性,完美适配中大型后端项目、团队协作开发以及微服务架构。