🧚 Gracile
一个轻量级的全栈 web 框架。
特性:
- 得益于 Lit (SSR),可移植的 HTML、CSS 和 JS。
- 得益于 Vite,在开发和构建期间具有高度响应性。
- 其 runtime 和你的 distributable 具有最小的依赖足迹。
- 拥抱 Custom Elements(又称 Web Components)或 WhatWG Fetch API 等 Web 标准。
- 构建时提供流畅的 Developer eXperience,而非繁琐的调整。
🏁 快速开始
使用 create gracile@latest 命令引导项目:
npm create gracile@latest
pnpm create gracile@latest
bun create gracile@latest
yarn create gracile@latest
欲了解更多信息,请访问 文档网站 (gracile.js.org)。
🌐 面向平台的元框架
Gracile 由 Vite 和 Lit SSR 提供支持。
借助它,你可以实现:
- 基于文件的路由,具备高效的代码分割
- Server Side Rendering(服务端渲染)
- Static Site Generation(静态站点生成)
- Server 集成(
Request/Response),适用于 Express、Hono… - 全栈 Custom Elements(Lit),支持 hydration(水合)
- Content 网站
- 多页或单页 Applications(应用程序)
- 渐进式增强(无 JS 回退、智能 hydration…)
- 以及更多功能,通过 Add-ons(插件)实现(Markdown、Metadata、SVG…)
所有这一切,仅需少量约定、面向标准的方法以及 非常精简的占用空间 🤏。
Web Components、TypeScript、SASS、Lit 以及其他 DX 优势均触手可及; 同时它们仍是可选的。
得益于 Vite 的模块化架构和 Node.js 的通用性,开发者 体验在开发和构建生产环境时都得到了全面优化。
易用性
为服务端和客户端编写相同的标记、样式和脚本语言。
即你已在其他地方熟悉并使用的:HTML、CSS 和
JavaScript。
简单并不意味着晦涩。你依然掌控全局,无需将灵活性 拱手让给你的框架。
面向标准
秉持平台化思维构建。每当标准可用于某项任务时,都应予以采用。
这也意味着更少的供应商特定惯用法需要维护,以及整体更具可移植性的代码库。
停止重复造轮子,拥抱面向未来的 API,日后你会感谢自己的!
开发者体验
随着开发者对日常工具链期望的提升,DX 标准也在不断提高。
“Vanilla” 社区中散落着许多瑰宝。
Gracile 提供一体化的开箱即用体验,同时将非核心观点保留为_可选_。
约定优于配置
在便利性与自由度之间找到正确的平衡点颇具挑战性。
希望在全栈 JS 领域,越来越多的模式得以确立。
Gracile 受到那些广泛实践的启发,让你有宾至如归之感。
轻量且无侵入
总而言之,Gracile 框架仅仅是 Vite、Lit SSR 以及一套非常受限的辅助函数和第三方依赖。
查看其
npmgraph 上的依赖树,
你会一目了然。
此外,一切设计都旨在尽可能保持你的 Vite 配置纯净。可以在极短时间内增强现有项目,且无任何干扰。
性能
速度并非 Gracile 的主要目标,因为那只是你起步时的合理
默认设置。
避免复杂的模板转换,或精准地交付客户端 JS
只是让 Gracile 成为“用更少做更多”强大工具的诸多方面中的几个。
包
核心
| 包 | 描述 | |
|---|---|---|
| @gracile/gracile | 全栈 Web 框架 — Vite & Lit SSR | |
| @gracile/engine | 基于 Vite 的构建和开发服务器引擎 | |
| @gracile/server | 服务端实用工具和 SSR 辅助函数 | |
| @gracile/client | 客户端实用工具和交互辅助函数 | |
| @gracile/cli | CLI 和配置加载器 | |
| create-gracile | 项目脚手架生成器 (npm create gracile) |
附加组件
| 包 | 描述 | |
|---|---|---|
| @gracile/markdown | 带元数据提取的 Markdown 文件导入 | |
| @gracile/markdown-preset-marked | 使用 Marked 的 Markdown 预设 | |
| @gracile/metadata | 页面头部元数据辅助工具(标题、OG…) | |
| @gracile/sitemap | Sitemap 和 robots.txt 生成 | |
| @gracile/svg | SVG 导入、优化和内联 |
Labs (@gracile-labs)
| 包 | 描述 | |
|---|---|---|
| client-router | Gracile 页面的客户端路由 | |
| islands | 支持多框架水合的岛屿架构 | |
| hmr | Web Components HMR Vite 插件 | |
| css-helpers | Web Components 的采用样式表工具 | |
| better-errors | 增强的错误显示和格式化 | |
| functional | 基于信号的钩子和上下文原语 | |
| devtools | 用于路由和状态的浏览器内开发面板 |
Labs — JSX & 模板
| 包 | 描述 | |
|---|---|---|
| jsx-forge | 原生 TS 编译器:JSX 转 HTML 模板字符串 | |
| vite-plugin-jsx-forge | JSX Forge 的 Vite 插件 | |
| babel-plugin-jsx-to-literals | Babel 插件:JSX 转 HTML 模板字符串 | |
| vite-plugin-babel-jsx-to-literals | JSX→Literals Babel 插件的 Vite 封装 |
Labs — Literals (@literals)
| 包 | 描述 | |
|---|---|---|
| html-css-minifier | 压缩 HTML 模板字符串 | |
| rollup-plugin-html-css-minifier | 用于 HTML 字符串压缩的 Rollup 插件 | |
| parser | 从代码中解析模板字符串 |
Labs — 独立工具
| Package | Description | |
|---|---|---|
| og-images-generator | 从 HTML 生成 OG 图片(无需无头浏览器) | |
| vite-plugin-standard-css-modules | 在 Vite 中通过 import 属性使用 CSS modules |
Internal
| 包 | 描述 | |
|---|---|---|
| @gracile/internal-tsconfigs | 共享的 TypeScript 配置预设 | |
| @gracile/internal-utils | 共享的 monorepo 工具 |
👐 贡献
参见 CONTRIBUTING.md。
“完美并非无可添加,而是无可删减。”
― 安托万·德·圣-埃克苏佩里, 飞行员的奥德赛