当前位置: 首页 > news >正文

脚手架_结构及作用

脚手架(Scaffolding)完全指南

一、什么是脚手架

脚手架(Scaffolding)是软件开发中的代码生成工具,用于快速初始化项目骨架,自动化创建标准的目录结构、配置文件、基础代码模板。

类比理解

盖房子时,脚手架是临时搭建的框架结构,帮助工人快速开始正式施工。软件开发中的脚手架同理——它先搭好项目骨架,开发者只需专注于业务逻辑。


二、脚手架的核心作用

作用说明带来的价值
标准化统一项目结构、技术栈选择团队代码风格一致,减少沟通成本
快速启动一键生成项目骨架原来 1-2 天的初始化 → 5 分钟完成
最佳实践内置集成业界验证过的架构模式避免新手踩坑,直接复用成熟方案
减少重复劳动自动生成 CRUD、API路由、数据模型等模板代码开发者聚焦核心业务逻辑
降低门槛不需要熟悉所有技术细节也能快速上手新人能快速产出

三、主流脚手架工具

3.1 Python 生态

FastAPI CLI
# 安装pipinstallfastapi# 创建项目(FastAPI 官方脚手架)fastapi project myproject--templatestandard

生成结构:

myproject/ ├── app/ │ ├── __init__.py │ ├── main.py # FastAPI 应用入口 │ ├── config.py # 配置管理 │ ├── database.py # 数据库连接 │ ├── models/ # 数据模型 │ ├── schemas/ # Pydantic 模式 │ ├── routers/ # API 路由 │ ├── services/ # 业务逻辑 │ └── utils/ # 工具函数 ├── tests/ # 测试目录 ├── requirements.txt └── README.md

适用场景:RESTful API 服务、数据接口、微服务


Django / Django REST Framework
# 安装pipinstalldjango djangorestframework# 创建项目django-admin startproject myproject# 创建应用cdmyproject python manage.py startapp api

生成结构:

myproject/ ├── myproject/ │ ├── __init__.py │ ├── settings.py # Django 配置 │ ├── urls.py # 根路由 │ ├── wsgi.py │ └── asgi.py ├── api/ │ ├── __init__.py │ ├── models.py # 数据模型 │ ├── views.py # 视图逻辑 │ ├── serializers.py # DRF 序列化 │ ├── urls.py # API 路由 │ └── admin.py # 后台管理 ├── tests/ ├── manage.py └── requirements.txt

适用场景:全栈 Web 应用、管理后台、含数据库的完整系统


Cookiecutter(通用模板引擎)
# 安装pipinstallcookiecutter# 从 GitHub 模板创建项目cookiecutter https://github.com/audreyr/cookiecutter-pypackage# 从本地模板创建cookiecutter ./my-template/

常用模板库:

模板名称用途
audreyr/cookiecutter-pypackagePython 包开发
Cookiecutter DjangoDjango 全栈项目
cookiecutter-data-science数据科学项目

适用场景:需要高度自定义项目结构时


3.2 JavaScript / Node.js 生态

Vue CLI / Vite
# 安装npmcreate vue@latest my-vue-app# 或使用 Vite(更现代)npmcreate vite@latest my-vue-app ----templatevue

Vite 生成结构:

my-vue-app/ ├── public/ # 静态资源 ├── src/ │ ├── assets/ # 图片、字体等 │ ├── components/ # Vue 组件 │ ├── views/ # 页面视图 │ ├── router/ # Vue Router │ ├── stores/ # Pinia 状态管理 │ ├── api/ # 接口封装 │ ├── utils/ # 工具函数 │ ├── App.vue # 根组件 │ └── main.js # 入口文件 ├── index.html ├── vite.config.js # Vite 配置 └── package.json

适用场景:Vue 3 前端应用


Create React App(CRA)/ Vite React
# 使用 Vitenpmcreate vite@latest my-react-app ----templatereact

生成结构:

my-react-app/ ├── public/ │ └── index.html ├── src/ │ ├── components/ # React 组件 │ ├── pages/ # 页面 │ ├── hooks/ # 自定义 Hooks │ ├── services/ # API 服务 │ ├── store/ # 状态管理 │ ├── utils/ # 工具函数 │ ├── App.jsx │ ├── App.css │ └── main.jsx ├── index.html ├── vite.config.js └── package.json

适用场景:React 前端应用


Yeoman(通用脚手架生成器)
# 安装npminstall-gyo# 安装 generatornpminstall-ggenerator-angularnpminstall-ggenerator-node# 运行yo angular

Yeoman 常用 Generator:

Generator用途
generator-angularAngular 应用
generator-nodeNode.js 模块
generator-expressExpress API
generator-federal企业级前端

3.3 Java 生态

Spring Boot Initializr

在线方式:访问 https://start.spring.io

命令行方式:

curlhttps://start.spring.io/starter.zip\-dtype=gradle-project\-dlanguage=java\-dbootVersion=3.2.0\-dbaseDir=myproject\-dgroupId=com.example\-dartifactId=myproject\-dname=myproject\-dpackageName=com.example\-djavaVersion=17\-ddependencies=web,data-jpa,mysql\-omyproject.zip

生成结构:

myproject/ ├── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── com/example/ │ │ │ └── myproject/ │ │ │ ├── MyprojectApplication.java # 启动类 │ │ │ ├── controller/ # 控制器 │ │ │ ├── service/ # 业务层 │ │ │ ├── repository/ # 数据访问层 │ │ │ ├── entity/ # 实体类 │ │ │ └── config/ # 配置类 │ │ └── resources/ │ │ ├── application.yml # 配置文件 │ │ ├── static/ # 静态资源 │ │ └── templates/ # 模板文件 │ └── test/ │ └── java/ ├── pom.xml / build.gradle └── mvnw / gradlew

适用场景:Java 微服务、企业级后端应用


MyBatis-Plus Auto Generator
// Maven 依赖<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-generator</artifactId><version>3.5.5</version></dependency>
// 运行代码生成器FastAutoGenerator.create(url,username,password).globalConfig(builder->{builder.author("作者").outputDir("输出路径");}).packageConfig(builder->{builder.parent("com.example").moduleName("demo");}).strategyConfig(builder->{builder.addInclude("表名");}).execute();

生成内容:Entity 实体类、Mapper 接口、Service 接口/实现、Controller 控制器

适用场景:MyBatis 项目快速生成 CRUD


3.4 Go 生态

goctl(Go Zero 脚手架)
# 安装goinstallgithub.com/zeromicro/goctl@latest# 创建 API 服务goctl api new myapicdmyapi go mod tidy go run myapi.go-fetc/myapi-api.yaml

生成结构:

myapi/ ├── etc/ │ └── myapi-api.yaml # 配置文件 ├── internal/ │ ├── config/ │ │ └── config.go # 配置定义 │ ├── handler/ │ │ ├── myapilogic.go # 业务逻辑 │ │ └── myapihandler.go # 请求处理 │ ├── logic/ │ │ └── myapilogic.go # 核心逻辑 │ ├── svc/ │ │ └── servicecontext.go │ └── types/ │ └── types.go # 请求/响应结构 ├── myapi.go # 入口文件 └── go.mod

适用场景:Go 微服务、API 服务


Wire(依赖注入脚手架)
# 安装goinstallgithub.com/google/wire/cmd/wire@latest# 在项目目录运行wire

生成wire_gen.go:自动生成依赖注入代码


3.5 AI / LLM 应用生态

LangGraph CLI(实验性)
# 安装pipinstalllanggraph-cli# 创建新项目langgraph new my-agent-project# 运行开发服务器langgraph dev

生成结构:

my-agent-project/ ├── langgraph/ │ ├── __init__.py │ ├── agent.py # Agent 核心逻辑 │ ├── graph.py # LangGraph 状态图定义 │ ├── state.py # 状态模式定义 │ └── tools.py # 工具函数 ├── tests/ ├── requirements.txt └── README.md

适用场景:Multi-Agent 应用、LLM 对话系统


Dify(无需代码的 AI 应用平台)

启动方式:

# Docker Compose 启动gitclone https://github.com/langgenius/dify.gitcddify/dockercp.env.example .envdocker-composeup-d

生成结构:

dify/docker/ ├── docker-compose.yaml # 编排文件 ├── .env # 环境变量 ├── nginx/ │ └── nginx.conf # Nginx 配置 ├── postgres/ │ └── init.sql # 数据库初始化 └── volumes/ ├── db/ # 数据库存储 ├── redis/ # Redis 存储 └── api/ # API 日志

适用场景:RAG 应用、Agent 构建、工作流编排


四、脚手架的核心组成

通用组成模块

项目脚手架/ │ ├── 📁 入口文件/启动文件 │ ├── main.py / main.js / index.ts / main.go │ └── app.py / app.js / application.go │ → 作用:程序启动入口,初始化核心组件 │ ├── 📁 配置文件 │ ├── .env # 环境变量(敏感配置) │ ├── config.yaml # 应用配置 │ ├── settings.py # Django/Spring 配置 │ └── pyproject.toml / package.json │ → 作用:集中管理环境、数据库、第三方服务等配置 │ ├── 📁 数据层 │ ├── models/ # 数据模型(Python/Java) │ ├── entity/ # 实体类(Java) │ ├── schema/ # Pydantic 模式 │ └── repository/ # 数据访问层 │ → 作用:定义数据结构、数据库表映射 │ ├── 📁 业务逻辑层 │ ├── services/ # 服务层(业务逻辑) │ ├── logic/ # 核心业务逻辑 │ └── handlers/ # 请求处理器 │ → 作用:封装核心业务规则 │ ├── 📁 接口层 │ ├── routers/ # API 路由(FastAPI) │ ├── controllers/ # 控制器 │ ├── views/ # 视图(Web) │ └── api/ # API 接口定义 │ → 作用:定义对外接口,处理请求/响应 │ ├── 📁 中间件/插件 │ ├── middleware/ # 中间件 │ ├── plugins/ # 插件系统 │ └── interceptors/ # 拦截器 │ → 作用:请求预处理/后处理(日志、认证、限流) │ ├── 📁 工具/公共函数 │ ├── utils/ # 工具函数 │ ├── common/ # 公共模块 │ └── helpers/ # 辅助函数 │ → 作用:复用工具代码(日期格式化、加密、验证等) │ ├── 📁 测试目录 │ ├── tests/ # 单元测试 │ ├── test_cases/ # 测试用例 │ └── fixtures/ # 测试数据 │ → 作用:自动化测试,保证代码质量 │ ├── 📁 静态资源 │ ├── static/ # CSS/JS/图片 │ ├── public/ # 公开静态文件 │ └── uploads/ # 用户上传文件 │ → 作用:存放非代码资源 │ └── 📄 依赖声明 ├── requirements.txt # Python 依赖 ├── package.json # Node.js 依赖 ├── pom.xml / build.gradle # Java 依赖 └── go.mod # Go 依赖 → 作用:声明项目所需第三方包及版本

五、脚手架的选择决策树

需要快速启动项目? │ ├── 是 → 用框架自带的 CLI │ ├── Python → fastapi / django-admin │ ├── JavaScript → vite / create-react-app │ └── Java → Spring Initializr │ └── 否 → 需要高度自定义? │ ├── 是 → 用通用模板引擎 │ ├── Cookiecutter(Python) │ └── Yeoman(JavaScript) │ └── 否 → 用企业级脚手架 ├── 前端 → PAIFE / Ant Design Pro └── 后端 → 自研脚手架(沉淀团队规范)

六、脚手架 vs 不用脚手架

维度使用脚手架手动搭建
启动速度⚡ 5-30 分钟🐢 1-3 天
代码一致性✅ 标准化❌ 因人而异
最佳实践✅ 内置❌ 需自行积累
灵活性⚠️ 受限于模板✅ 完全自由
学习成本⚠️ 需学习脚手架用法✅ 只学框架
适合场景常规项目、快速原型特殊架构、定制化需求

七、面试加分点

当面试官问到脚手架时,可以这样回答:

Q:你在项目中用过脚手架吗?

参考回答:

“在团队项目中,我使用Vite初始化 Vue 3 前端项目,配合Pinia状态管理和Vue Router,项目启动从原来的手动配置 2 小时缩短到 5 分钟。同时,我基于Cookiecutter自定义了团队前端模板,集成了 ESLint、Prettier、Axios 封装、Husky 提交校验等,保证团队代码风格一致。”

Q:脚手架和框架的区别是什么?

参考回答:

“框架是完整的开发体系,定义了核心运行机制(如 Django 的 MTV 模式)。脚手架是代码生成工具,用于快速生成项目骨架。两者的关系:脚手架帮你搭建项目结构,框架提供运行时的核心能力。”

Q:你们团队是如何沉淀脚手架的?

参考回答:

“我们用Cookiecutter统一管理团队项目模板,每个新项目从模板生成,包含:统一的目录结构、基础配置、封装好的请求工具、权限校验中间件、统一的日志规范。这样新同事第二天就能上手开发,而不需要熟悉所有底层细节。”


八、附录:常用脚手架速查表

技术栈脚手架工具命令
FastAPIfastapiCLIfastapi project <name>
Djangodjango-admindjango-admin startproject <name>
FlaskflaskCLIflask init
Python 包Cookiecuttercookiecutter <template>
Vue 3Vitenpm create vue@latest
ReactVitenpm create vite@latest -- --template react
AngularAngular CLIng new <project>
Next.jscreate-next-appnpx create-next-app@latest
Spring BootInitializrstart.spring.io
Gogoctlgoctl api new <name>
NestJSNest CLInest new <name>
React NativeCLInpx @react-native-community/cli init <name>
Flutterflutter createflutter create <project>
LangGraphlanggraph-clilanggraph new <project>
DifyDocker Composedocker-compose up -d
http://www.jsqmd.com/news/1138535/

相关文章:

  • 字幕格式转换再也不用秃头啦!这个神器让你一键批量搞定
  • ADS LineCalc 与 Momentum 协同仿真:FR4 微带线 2.4GHz 损耗误差 0.3dB 分析
  • 复杂遮挡环境轨迹还原技术,Trajectory Tensor张量推演在视频孪生中的应用
  • 戈壁自驾必备:备用电机选择与应急更换指南
  • Understat异步足球数据分析系统架构设计与工程实践
  • 想转行AI产品经理?别再踩这大坑了!收藏这份全新工作逻辑指南
  • Universal x86 Tuning Utility:解锁电脑隐藏性能的终极指南
  • 【单片机毕业设计】 基于 STM32 的蓝牙音乐声光喷泉控制系统设计,基于单片机的音频同步彩灯喷泉智能装置开发(017301)
  • Seedance2.5本地AI生图与视频生成部署实践指南
  • 国产吉他品牌技术发展与市场格局分析
  • Git,Gitee的学习
  • 都来投米哈游!
  • RAG 2.0 时代:GraphRAG 和 Agentic RAG 怎么选?一份带数据的实战指南
  • Spring Boot 3 + Vue 3 + MySQL 女性生理健康管理平台源码 前后端分离
  • 2026 供应商关系管理系统排行榜前十强,选型必看
  • 技术人做个副业有多难?发个服务帖被限流三次后,我换了个思路
  • 性价比高的广州高考日语哪家口碑好
  • 英雄联盟智能助手:用League Akari彻底改变你的游戏体验
  • 高企管理成熟度评价——为什么专知智库首次提出?
  • Java毕业设计-基于 SpringBoot 的连锁门店管理系统的设计与实现 基于 SpringBoot+Vue 的连锁商店店务管理系统(源码+LW+部署文档+全bao+远程调试+代码讲解等)
  • Andrew Ng(吴恩达)谈 Loop Engineering:AI 编程中的三个关键循环
  • FreeRTOS学习day1:Keil 工程配置与 FreeRTOS 链表机制理解
  • 终极指南:用10000+行Java代码构建完整的三国杀游戏框架
  • Wayback Machine浏览器扩展:你的免费网页时光机,拯救消失的互联网记忆
  • 构建下一代认知智能体的技术架构与实践
  • MoE架构解析:如何在普通电脑上运行753B参数的GLM5.2模型
  • 太炸了!开源 AI 语音工作室 Voicebox:克隆声音、听写输入、AI Agent 开口说话,全本地运行
  • Claude Code藏了三个月的“卧底代码“被扒了——阿里连夜全面禁用,这5个AI编程安全陷阱开发者必须知道
  • 工训赛智能小车 PCB 自制实战:从核心板到 4 路 BTN7971B 驱动,成本降低 60%
  • 双主轴同步加工VERICUT仿真:从原理到实践的全流程指南