受够了 create-xxx?我写了一个聚合主流框架的脚手架

"不想自己写脚手架的前端不是好前端",这句话我一直记在心里回响。每次开启一个新项目,我总觉得缺了点什么。在做了大量的调研和思考之后,我决定,是时候动手打造一个属于自己的前端脚手架了。

我个人感觉目前主要面临两个痛点:

  1. 市面上的脚手架太多了,记不住! 说实话,create-react-app、create-vite、create-next-app... 每次用都要先去搜索文档,找到那个准确的命令。我常常想,能不能有一个统一的入口,让我不再为记这些名字而烦恼?

  2. 脚手架不够灵活,不能自由组合。 官方的脚手架通常只提供最基础的模板。如果我想加入 React Router、Zustand,或者配置好 ESLint 和 Prettier,就得在项目创建后手动安装、配置一大堆东西。这个过程繁琐、重复,且容易出错。

那么,我能不能写一个既能汇总主流脚手架,又能让我在创建时就自由组合所需配置的工具呢?这不仅能解决我的痛点,也是一个绝佳的学习机会。

于是,我开始疯狂撸代码,create-web-app 的雏形就此诞生

create-web-app

支持多引擎选择

为了解决"记不住命令"的问题,我首先做了一个"引擎选择"功能。我汇总了目前社区最主流的十几种脚手架,包括:

  • Vite (React, Vue, Svelte...)
  • Umi
  • Create React App
  • Next.js
  • Nuxt
  • Astro
  • SvelteKit
  • Angular
  • Remix
  • ...等等

现在,你只需要记住一个命令 pnpm create-web-app,就能启动任何一个主流框架的创建流程。它就像一个超级启动器,将所有官方 CLI 的能力都聚合在了一起

自由组合配置

除了代理外部工具,我做了一套create-web-app的自己的创建模版,可以在创建项目时,就完成所有基础配置的自由组合。

框架、语言、状态管理、路由、规范... 一步到位!

在create-web-app模式下,可以通过交互式的问答,一步步进行:

  1. 选择框架:React 还是 Vue?
  2. 选择语言:JavaScript 还是 TypeScript?
  3. 选择插件 :
    • 路由 :需要 React Router 或 Vue Router 吗?
    • 状态管理 :Redux、Zustand 还是 Pinia?
    • 代码规范 :ESLint、Prettier、Husky 要不要安排上?

当你确认完所有选项后,一个已经配置齐全、装好依赖、甚至连入口文件都帮你改好 的项目就诞生了!你不再需要手动 pnpm install 一堆包,再小心翼翼地去 main.js 里 app.use(router)。

实现

这种灵活性背后,是一套精心设计的声明式插件系统 和基于 AST 的代码注入机制。

  • 插件注册中心 (plugin-registry.js):我把每一个可选功能(如 Zustand、ESLint)都抽象成一个插件。每个插件清晰地定义了它需要:

    • 哪些 npm 依赖 (pkg)
    • 哪些配置文件 (files)
    • 需要对哪个文件的代码做什么修改 (transforms)
  • AST 代码变换器 (transforms/) :当你说需要 React Router 时,脚手架不会用粗暴的字符串替换来修改你的入口文件。它会把 main.jsx 解析成一个抽象语法树(AST),精准地找到 <App />,然后用 <RouterProvider /> 将其包裹,最后再把 AST 安全地转换回代码

总结

从一个想法,到一个可用的工具,create-web-app 解决了我作为前端开发者最真实的痛点。它通过"双引擎"模式,既拥抱了社区的强大生态,又通过"自研插件"模式提供了极致的灵活性和效率

当然,它目前还只是一个初版,未来还有很多可以做的事情:

  • 支持 CLI 直传参数 :实现 pnpm create-web-app my-app --framework react --plugins router,zustand,跳过交互,一键生成。

  • 扩充插件生态:加入更多测试框架、组件库、国际化等插件。

  • 企业级规范注入:一键集成团队的 CI/CD 配置、Git Hooks 规范等。

  • 目前仅仅支持pnpm包管理工具

  • 目前仅仅支持vite打包

  • 等等

相关推荐
智慧光迅AINOPOL35 分钟前
园区全光网IP+POL架构怎么设计:组网拓扑与带宽演进
网络协议·tcp/ip·架构
沙蒿同学1 小时前
不引 Ghostscript:我用纯 Go 给 PDF 做了一场「压缩手术」
前端·后端·github
骑着蜗牛撵大象3271 小时前
语音变分录、规则挡幻觉:拆解开源 AI 记账系统 Smart Ledger 的全栈设计
人工智能·ai·架构·js·数据校验
变与不变8062 小时前
jQuery细节以及使用应用场景
前端·javascript·jquery
SailingCoder4 小时前
【封闭结束1】端到端交付:Agent 一次请求如何走完全链路
前端·安全·ai·面试·agent·harness
AI办公探索者4 小时前
从“岗位为中心”到“任务为中心”:企业级Agent Hub的架构演进
人工智能·架构
Interview Aid1124 小时前
Uber Interview Process 完整指南:面试流程、OA 真题与 VO 备考
面试·职场和发展
阡陌数智5 小时前
Mistral Large 4 深度拆解:细粒度 MoE 架构与安全 Agent 工程实战
安全·架构
forest_095 小时前
Agent 系列 21|部署、发布与运维:把 Agent 变成一个能上线、能放量、能撤回的服务
人工智能·机器学习·架构·prompt·agi
风骏时光牛马6 小时前
AI多模块协同自动化工作流
前端