你的网站或许不需要前端构建(二)

💡 原文中文,约12400字,阅读约需30分钟。
📝

内容提要

本文介绍了一种无需前端编译构建的现代语法开发网站界面的方案,使用Baidu的San框架和周边生态,ESL作为前端加载器,San Router作为前端路由器,Santd作为前端组件库。文章还分享了搭建基础架子和编写入口程序的方法,以及选择San框架的客观和主观原因。

🔎

延伸解读

技术选型的权衡:为何是 San 生态

作者选择 San 框架及其生态(ESL、San Router、Santd)并非随意,而是基于其近十年稳定更新、良好向前兼容性、大厂应用背书以及无商业化压力的纯粹性。这些客观因素降低了长期维护风险。主观上,作者厌倦了构建工具带来的环境重置和依赖废弃提醒,追求简单有效的方案。这种选型思路适合重视稳定性和低维护成本的展示型项目。

基础架子设计:直接引入与加载器结合

文章建议将基础样式和脚本依赖直接在 HTML 中引入,而非全部交给加载器。这样做有三个好处:让浏览器更早加载资源,提升渲染速度;减少 JS 中的依赖管理复杂度;简化加载器加载的模块,使其更简单。这种混合策略平衡了加载效率与代码组织,尤其适合非 HTTP2 环境。作者还提到可合并更新频率低的依赖以减少请求数。

解决模块适配:字符串替换的务实做法

Santd 依赖的 dayjs 未提供 AMD 格式,导致模块名不匹配。作者没有选择编译构建,而是通过调整加载顺序(ESL 在 Santd 前)和字符串替换来修正导出名称与内部 require 调用。例如将 `dayjs__default` 直接指向全局 `dayjs`,并手动扩展插件。这种方法虽显取巧,但避免了构建工具,适合不想折腾编译的团队,不过需注意替换的准确性和维护成本。

开发体验:现代语法与快速界面搭建

借助 Santd 的示例代码,开发者可以快速实现支持双向绑定、模板与逻辑分离的现代 SFC 写法。页面模板可直接从官方示例复制粘贴,刷新即可看到效果,大幅节约样式开发时间。入口程序通过 require 确保依赖加载完毕再执行,路由支持动态、嵌套和懒加载。这种模式让不构建的开发也能获得接近现代框架的体验,适合快速原型和内部工具。

❓

Q&A

不用前端构建工具,怎么用现代语法开发网站?

可以使用百度 San 框架及其生态:ESL 作为前端加载器,San Router 作为路由器,Santd 作为组件库。只需一个 HTML5 页面引入这些脚本,通过 AMD 模块规范编写代码,无需编译构建即可运行。

为什么选择 San 框架而不是 Vue 或 React?

客观原因:San 保持良好的向前兼容性,近十年稳定更新,有大厂应用背书,团队稳定且无商业化压力。主观原因:作者厌倦构建工具和依赖管理,追求简单有效的方案。

ESL 加载器有什么特别之处?

ESL 是 requirejs 的强化版,尺寸更小(不到 5KB)、性能更高、更健壮,支持可靠的顺序加载和解析执行,适合免构建场景。

如何搭建一个不需要编译构建的前端项目基础结构?

创建一个 HTML5 标准页面,引入必要的样式和脚本依赖(如 Santd 样式、San 框架、ESL 加载器等),然后通过 require.config 配置加载器,并用 require 加载入口模块。

遇到 Santd 和 Dayjs 模块不兼容的问题怎么解决?

可以调整加载顺序,将 ESL 放在 Santd 之前,让 Santd 按 AMD 规范加载。对于 Dayjs 的模块名不匹配问题,可以通过字符串替换修改 Santd 源码中的引用,或写一个简单的文本替换程序处理。

如何编写入口程序和 Main 函数?

在 HTML 中通过 require(["main"], function(app){ app.init(); }) 加载入口。main.js 中使用 define 声明依赖,用 San Router 注册路由并启动应用。

Santd 组件库有什么好处?

Santd 是适配 San 语法的 Ant Design 组件库,提供现成的样式和组件,可以快速搭建界面,节约 CSS 开发时间,直接复制粘贴示例即可使用。

🏷️

标签

➡️

继续阅读