news 2026/7/7 2:33:10

脚手架_结构及作用

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
脚手架_结构及作用

脚手架(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
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/7 2:31:31

让中学生也能一下子认识中学数学有几百年重大错误:将无穷多各异假R误为R

让中学生也能一下子认识中学数学有几百年重大错误&#xff1a;将无穷多各异假R误为R黄小宁“科学”共识&#xff1a;数学是严密、精确的代名词说明数学尤其是初等数学绝对不可能有重大错误。这意味着只有外星人才具有挑战绝对不可能发现初等数学有几百年重大错误的超人智慧。自…

作者头像 李华
网站建设 2026/7/7 2:29:02

解密WinBtrfs:实现Windows与Linux文件系统无缝互通的创新方案

解密WinBtrfs&#xff1a;实现Windows与Linux文件系统无缝互通的创新方案 【免费下载链接】btrfs WinBtrfs - an open-source btrfs driver for Windows 项目地址: https://gitcode.com/gh_mirrors/bt/btrfs 你是否曾在双系统环境中陷入这样的困境&#xff1f;Linux中精…

作者头像 李华
网站建设 2026/7/7 2:25:30

打造全自动AI资讯聚合发布系统:liyown/ai-trend-publish项目深度解析与从配置到自动化部署的保姆级实操指南

打造全自动AI资讯聚合发布系统&#xff1a;liyown/ai-trend-publish项目深度解析与从配置到自动化部署的保姆级实操指南 在人工智能技术日新月异的当下&#xff0c;无论是开发者、产品经理还是科技爱好者&#xff0c;都面临着严重的信息焦虑。Hacker News、GitHub Trending、Pr…

作者头像 李华
网站建设 2026/7/7 2:21:57

都来投米哈游!

米哈游2027届秋招技术提前批正式启动&#xff01; 【岗位类型】 程序&技术类、质量管理类、技术美术、技术策划 【面向人群】 2027届毕业生&#xff08;2026年9月-2027年8月毕业&#xff09; 内推链接&#xff1a;https://jobs.mihoyo.com/m/?recommendationCodeA2N6&a…

作者头像 李华