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

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

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

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

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

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

于是,我开始疯狂撸代码,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 RouterVue Router 吗?
    • 状态管理ReduxZustand 还是 Pinia
    • 代码规范ESLintPrettierHusky 要不要安排上?

当你确认完所有选项后,一个已经配置齐全、装好依赖、甚至连入口文件都帮你改好 的项目就诞生了!你不再需要手动 pnpm install 一堆包,再小心翼翼地去 main.jsapp.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打包

  • 等等

相关推荐
Justin3go1 天前
HUNT0 上线了——尽早发布,尽早发现
前端·后端·程序员
怕浪猫1 天前
第一章 JSX 增强特性与函数组件入门
前端·javascript·react.js
铅笔侠_小龙虾1 天前
Emmet 常用用法指南
前端·vue
钦拆大仁1 天前
跨站脚本攻击XSS
前端·xss
Tadas-Gao1 天前
AI是否存在“系统一”与“系统二”?——从认知科学到深度学习架构的跨学科解读
人工智能·架构·系统架构·大模型·llm
VX:Fegn08951 天前
计算机毕业设计|基于springboot + vue校园社团管理系统(源码+数据库+文档)
前端·数据库·vue.js·spring boot·后端·课程设计
ChangYan.1 天前
直接下载源码但是执行npm run compile后报错
前端·npm·node.js
skywalk81631 天前
在 FreeBSD 上可以使用的虚拟主机(Web‑Hosting)面板
前端·主机·webmin
ohyeah1 天前
深入理解 React 中的 useRef:不只是获取 DOM 元素
前端·react.js
MoXinXueWEB1 天前
前端页面获取不到url上参数值
前端