受够了 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打包

  • 等等

相关推荐
a努力。1 天前
网易Java面试被问:fail-safe和fail-fast
java·windows·后端·面试·架构
亭上秋和景清1 天前
指针进阶: 回调函数
开发语言·前端·javascript
周杰伦_Jay1 天前
【Open-AutoGLM】手机端智能助理框架详解
智能手机·架构·开源·云计算
前端小臻1 天前
react中的函数组件和类组件(快捷指令和区别)
前端·react.js·前端框架
烤麻辣烫1 天前
黑马大事件学习-15(前端登录页面)
前端·css·vue.js·学习·html
MobotStone1 天前
AI使用的10种最佳实践:提高你的工作效率和输出质量
人工智能·架构
Cache技术分享1 天前
266. Java 集合 - ArrayList vs LinkedList 内存使用深度剖析
前端·后端
踏浪无痕1 天前
MySQL 脏读、不可重复读、幻读?一张表+3个例子彻底讲清!
后端·面试·架构
腾讯云开发者1 天前
站在 AI 奇点之上,技术决策者如何破局?腾讯云架构师峰会来了!
架构
豆苗学前端1 天前
彻底讲透浏览器的事件循环,吊打面试官
前端·javascript·面试