本仓库的目标是做一套可用于生产环境的 JS + CSS 框架,最终在业务项目中只需要引入:
xjs.js(单文件 JS)xjs.css(单文件 CSS)但在本仓库内,为了保持可维护性,开发源码仍然分散在多个文件中(例如 animal.js、layer.js),再通过构建脚本合并为单文件产物。
本文档用于统一后续完善/开发的目录约定、命名规范、编码习惯、测试方式、发布流程。请把它当成项目的“团队约定”。
当前结构(关键文件):
animal.js:动画/选择器核心(Selection / animate / svg / timeline / scroll / inView 等能力)layer.js:弹出层组件(UI + 交互逻辑)xjs.css:库运行时需要的所有 UI 样式(例如 Layer 的 .layer-*)xjs.js:
animal.js + layer.js)dist/xjs.js:生产合并产物(由构建命令生成)doc/index.html:统一测试/文档入口(支持点击导航直接进入示例页面)main.go:构建与本地静态服务脚本animal.js / layer.js / xjs.css / doc/**dist/xjs.js(以及任何由构建生成的合并文件)dist/xjs.js + xjs.css 为准仓库自带 Go 静态服务(默认端口 8080):
go run main.go serve
然后在浏览器打开:
http://localhost:8080/doc/index.html说明:
doc/index.html会作为“测试总控台”,左侧导航/中间列表/右侧 iframe 组合用于快速打开各类测试页面。
将 animal.js + layer.js 合并输出到 dist/xjs.js:
go run main.go build
或指定输出路径:
go run main.go build path/to/xjs.js
对外只承诺以下全局变量(避免污染):
window.xjs:主入口(推荐统一使用)window.animal:兼容别名(与 xjs 等价)window.Layer:Layer 构造/工厂入口可选行为:
$window.XJS_GLOBAL_DOLLAR = true 时,才会在 $ 未被占用的前提下导出 $ = xjsxjs(selector) 返回的 Selection 链式对象进入xjs.config(未来可扩展)Promise(例如 animate().then(...))Selection 以支持链式调用(例如 .layer(...).addClass(... ) 未来扩展)animal.js、layer.js,新增模块保持一致)animal.js:核心选择器与动画体系(不直接引入 UI 样式)layer.js:UI 组件(允许依赖 xjs.css)camelCasePascalCaseUPPER_SNAKE_CASE_fire、_onKeydown)xjs(selector) 返回 Selection(继承 Array 的可链式集合)animate / draw / inViewAnimate / layer / unlayerparams.options(现有实现已倾向此策略)xjs.css)xjs.css<style>(可接受“确保已引入 CSS”的兜底逻辑,但不把完整样式写入 JS)目前 Layer 使用 .layer-*,后续新增组件建议遵循:
x-<component>-* 或沿用当前 layer-*(但需保持一致)xjs-,则逐步迁移)目标是:业务 CSS 不会因为类名冲突而被库“意外影响”,也不会轻易覆盖库样式。
新增 UI 组件时,尽量通过 CSS 变量暴露可定制项:
--xjs-color-primary--xjs-radius-md--xjs-shadow-lg--layer-...(若继续沿用 layer 命名空间)并保证:
doc/)doc/index.html 进入doc/layer/、doc/svg/、doc/tween_*)doc/index.html 的导航树中挂入口,保证“可点击直达”animal.js)典型落点:
Selection.prototype.xxx = function (...) { ... }Selection 类体内增加方法(更推荐,保持结构统一)xjs.xxx = ...(需要同时考虑 animal 别名)推荐方式:
component_xxx.js(或未来统一 components/xxx.js)xjs.css 增加 xxx-*(或 xjs-xxx-*)样式main.go build() 的拼接顺序)当前
main.go固定合并animal.js + layer.js,当模块增长时建议升级为“配置式列表”。
每次准备对外发布(或业务项目更新版本)前建议走一遍:
doc/index.html,对本次变更相关页面逐个验证go run main.go builddist/xjs.js 更新(不要手改)xjs/animal/Layer 是否都存在$ 是否仍然是“显式开关才导出”xjs.css 的类名是否避免与业务冲突当模块越来越多时,建议逐步引入以下工程化能力(仍保持“最终只发两个文件”的目标):
src/animal/、src/layer/、src/core/main.go 从“硬编码拼接两个文件”升级为“按清单拼接多个文件”dist/xjs.js 注入版本号、构建时间、变更摘要(便于定位线上问题)如果本文档与源码现状出现不一致: