统一
HTML-内在组成——没有表达语言,没有客户端运行时间.
统一是HTML和CSS中流利的人的静态站点生成器,他们不想与JavaScript框架,调温语言,或构建工具相干. 在平版 HTML 中写一个页眉、导航、页脚或页面布局一次,并统一将其变成每一页。 输出正是您所写的 HTML 和 CSS —— 统一不添加自己的 JavaScript 。 它取代了复制-paste铬和Apache SSI;它不与雨果(Hugo, 11ty)或Astro竞争.
整个写作表面有五件事,五分钟内可以学习:
| 你想说.. | 你写.. |
|---|---|
| 重新使用碎片(导航、脚印、徽章) | <include src="/_includes/nav.html"></include> |
| 在布局中环绕页面 | 无所事事——最近的 _layout.html 适用; data-layout="/path.html" 选一个, "none" 选择退出 |
| 标记页面内容所在, 或者让页面替换一个命名区域 | <main> 违约; <slot name="footer"> 在布局中, slot="footer" 在页面元素上 |
| 将一个文件或文件夹保存在已建站点之外 | 一个主要下划线: _draft.html, (中文(简体) ), _includes/ |
照原样运送一分光片段 <include>,嵌入,取出) | 说吧 *.fragment.html |
如果不能与这五种表达,它就不属于统一.
规格
docs/里面的每一条规范规则都包含在 与真正的CLI相悖的测试中.
安装
独立二进制 (Linux and macOS, x86 64 and arm64——没有其他设备可以安装):
curl -fsSL https://raw.githubusercontent.com/fwdslsh/unify/main/install.sh | bash
安装到 ~/.local/bin; 脚本接受 --global, (中文(简体) ), --dir PATH, (中文(简体) ), --version vX.Y.Z, (中文(简体) ), --force,以及 --dry-run二进制附于 GitHub 发布。还没有Windows 二进制——使用下面的安装.
节点或 Bun :
npx @fwdslsh/unify build # no install at all
npm install -g @fwdslsh/unify
bun add -g @fwdslsh/unify
节点=22.12.0或 Bun=1.2.0. 一样 unify 运行于两者并产生字节-同义输出;安装的脚本默认选择节点,以及 bun add -g 在Bun下面运行它。 德诺不支持. 没听说过吗? 用上二进制.
快开始
unify init # scaffold a starter site into site/
unify dev # build, watch, serve, reload — http://localhost:3000
unify build # write the final site to dist/ — upload it anywhere
unify init 脚手架将一个完整的场地进入 site/ ——布局,导航包括,主页,CSS包含一个您编辑的自定义属性的主题文件,a robots.txt,并按 site/_examples/ 从不公布的——加上项目根外的三个文件 site/ 因此,他们永远不能出版: README.md指导谁编辑网站, DEPLOY.md,部署配方,和a unify.yaml 列出每个构建的旗帜,描述和评论,所以你只解析与默认不同之处——用 template: live——此站点的模板来自 unify update 在向您展示列表并询问之后, 再次获取并复制其更改后的文件到网站, 并在它下面 keep:,文件的更新从未覆盖:主题和 unify.yaml 自己来 五个模板: default, (中文(简体) ), basic, (中文(简体) ), blog, (中文(简体) ), docs, (中文(简体) ), portfolio每一个脚手架通过 unify build --dry-run --strict 财务报告和审定财务报表 unify audit --strict 从盒子里出来.
新来的? 教程为 开始。 。 。 .
如何运作
一个布局是完整的HTML页面——在浏览器中打开它,它的槽回放是它自己的预览:
<!-- site/_layout.html -->
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>— My Site</title>
<link rel="stylesheet" href="/assets/style.css">
</head>
<body>
<include src="/_includes/nav.html"></include>
<main><slot></slot></main>
<footer><slot name="footer"><p>© My Site</p></slot></footer>
</body>
</html>
一个页面也是一个完整而普通的HTML文档. 它从来没有提到布局——最近的 _layout.html 自动应用 :
<!-- site/index.html -->
<!doctype html>
<html>
<head><title>Home</title></head>
<body>
<main>
<h1>Home</h1>
<p>This lands in the layout's <main>.</p>
</main>
</body>
</html>
已建页面是其布局 <main> 由页面内容填充,页面标题加入到版面前: <title>Home — My Site</title>为了取代一个命名的区域,一个页面将一个标准属性放在一个普通元素上—— <p slot="footer">© My Site — <a href="mailto:[email protected]">email us</a></p> ——该元素取代了布局的 <slot name="footer">,标签和所有。 第一句中的优先规则: 被命名的填充到命名的插槽, 其它都到空插槽, 否则进入 <main>。 。 。 .
马克倒行本是相同的,前题提供头部. title, (中文(简体) ), layout, (中文(简体) ), class, (中文(简体) ), lang, (中文(简体) ), dir,以及 schema 是带有行为的前题密钥; 所有其他密钥都变成一个 <meta> 标签,以及 draft, (中文(简体) ), permalink,以及 slug 这些错误是统一的名称。 已建页面中不含 <slot> 元素,无 data-layout 属性,而没有注入脚本——一个能够活到输出中的统一符号是 <meta name="schema">在要求生成 JSON-LD 块的页面上.
完整的模型在 产品规格; 准确的算法——槽,头合并,根属性, URL重写——都在 合规规格。 。 。 .
图标
unify [build] build the site (default command)
unify audit evaluate the site the build would publish — writes nothing
unify dev build, watch, serve, and reload — the inner loop
unify watch build + rebuild on change, no server
unify init [template] scaffold a starter site — a built-in name, a directory, a git repository (URL/<subdirectory>#ref), or any npm package
unify update [template] fetch the template again and copy its changed files over the site: the files it would overwrite are listed and confirmed first (--yes answers, --dry-run previews); keep: under template: in unify.yaml names the files it never overwrites
unify --help 列出每个选项,其中 --pretty-urls, (中文(简体) ), --base-url (这也会产生) sitemap.xml,以及 feed.xml 一旦一个页面宣布 schema: Article编号 :BlogPosting, (中文(简体) ), --canonical none (完成一次) --base-url 已设定, --catalog, (中文(简体) ), --search-corpus, (中文(简体) ), --dry-run,以及 --strict编辑 CLI 参考 记录每个命令、选项和退出代码——没有其他命令。 可选 unify.yaml 在项目根上挂有被保存的旗帜,仅有与默认不同之处; unify init 写一个,每个选项 描述和评论 unify build --save-config 从所经过的旗帜上填入.
实例
examples/ 拥有8个完整的场地,每个建筑物在地下清洁 unify build --dry-run --strict4个由代理撰写,只给了60行作者规则和客户简介,并保存着,因为他们通过了审查——所以他们显示了规则实际导致某人建立的规则;另外4个是手持的,包括统一自己通过统一建造的文档站点,另一个发电机(Eleventy)作为源通过 --generate,以及一个浏览、过滤和搜索UI的数据驱动的博客 --catalog编号 :--search-corpus中:从数据文件生成的页面,客户端过滤,带有自身染色体的部分,没有嵌入染色体的页面,在子目录下部署,htmx互换 .fragment.html 面板,一个Svelte组件编译成普通资产,客户端搜索生成了JSON. examples/README.md 指定每个图案.
文档
下面的一切都公布在 统一.fwdslsh.dev从 docs/ 统一自己.
使用统一
- 开始 ——补习.
- 撰写规则 ——完全写出地表,为六十行下.
- CLI 参考 –每个命令,选项和退出代码.
- Java 脚本 API —— 说 实验性,可在v1前去除.
run(options):构建为函数,返回状态,诊断,构建的文件和审计报告作为数据. - 模板 – 从内置的脚手架, 目录, git 仓库或 npm 包; 保持站点的电流
unify update,其中列出了它将覆盖和询问的内容; 发布您自己的模板. - 一体化 ——编译-资产模式:Svelte,TypeScript,或任何有编译器的东西,不采用框架.
- 十一号+htmx ——高级堆栈:另一个生成器生成由数据驱动的页面,统一它们,htmx增强它们. 可选的分层, 当不接触它们.
- 目录和搜索 – 一个博客列表, 方方面面, 以及从这两个文件边上构建的搜索框
--catalog编号 :--search-corpus写作. - 发电机配方 ——资产URL中的内容散列,有只用一天日期的RSS种子处理你的方式,每个屏幕显示
--generate。 。 。 . - 移植一个现有站点 ——保留每个活 URL:哪个源路径回答每个地址,有和没有
--pretty-urls,然后用十行对整张名单进行对照. - 模板版本 ——将模板贴到版本上,移动指针
unify update钉上什么extends:利用,尝试一个模板,或者在船前统一. - 嵌入式使用 在一个容器里运行CLI.
- 实例 ——八个完整的站点及其展示的模式.
统一的定义
- 产品规格 ——什么是统一,什么是组成模式,什么是非目标.
- 合规规格 ——规范实施者参考:精确算法,头相接表,闭关问题/咨询目录.
- 测试战略 ——检验合同和放行门.
- CI/CD 工作流程 ——每份工作都进行什么工作,允许它是什么意思.
如何验证文件
为特工服务
作者或编辑a 以统一方式建立的网站复议 文件/授权规则 ——60行以下的完整写出表面——在写出任何东西之前,不要取而代之的是其他生成器的常规:统一没有道具,没有表达,没有 draft:编号 :permalink:编号 :slug: 键,且布局不连锁.
unify init丢入一个README.md在项目根( 外部)site/,因此无法发布)重述最常见被猜测出错的规则. 如果项目有一个,请阅读它——它重述上面连在一起的规则,绝不是规则的变体.- 通过检查完成 :
unify build --dry-run --strict,则unify audit --strict退出时0从unify build表示dist/是完整的站点; 非零值 未发表 并且之前的输出没有受到影响——从不报告在非零退出上的成功. unify --help列出完整的 CLI。 没有其他命令或旗帜; 作者的规则生活在 文件/授权规则 和脚手架README.md而不是在CLI命令.
捐款 统一自己从开始 克劳德·姆德 财务报告和审定财务报表 捐款额; 数据 合规规格 这是规范的.
保证
- 你写的内容从不默不作声. 失去作者内容的任何内容都是
problem,还有问题阻碍出版。 温和程度,advisory时,不设块(在--strict这很重要。 诊断学是平庸的语言,定位,并命名一个固定——没有规则代码. - 出版是交易性的. 组成和每一次检查——包括对每个内部URL的参考检查——都跑入一棵临时树上,以及
dist/仅以零问题替换。 退出0表示dist/是完整的场地;1表示发现问题,且前一个输出为字节前未变;2表示无效使用. unify build --dry-run --strict运行整块建筑和每张支票,同时写出一无所有——单行CI lint.
而相反的保证——统一的东西永远不会做:
- 飞船JavaScript. 您的脚本通过未触及; 统一注入任何自己的( dev 的活重装从未到达)
dist/) (中文(简体) ). - 种取调伏语言. 没有变量,循环,条件,或道具. 衍生的页面来自您拥有的脚本,在构建前运行——一个种子是一个例外(
schema:加号--base-url) (中文(简体) ). - 成为组成部分框架. 填平布局;
<include>将文件逐字拼接,或者用你写的标记来填满片段的插槽——永远不要道具或值. - 需要配置. 常规, 不是配置文件 .
- 进入您的 CSS, 或者成为真正的网络服务器 .
@scope编号 :@layer和真正的服务器已经回答这些.
完整的清单,连同推理和接受的费用,是 产品规格§5。 。 。 .
审计
unify audit 回答另一个问题——不是 这是建筑的声音吗? 不过 这个网站完成了吗? 它运行同样的管道,不发表任何文章,并报告调查结果:一个没有描述的网页,两个页共用标题,a #fragment 链接,该链接不命名、重复编号、页面无链接、结构数据与页面相矛盾。 没有分数,没有分数,没有字符数——和 build 从来没有运行过任何它, 所以没有发现可以维持释放. unify audit 输出 1 编号 broken 发现(自相矛盾的输出——无论你的意思是错的), unify audit --strict 也失败于 incomplete 那些是严格的CI门 unify build --audit 只有在同一审计通过时才公布. --format json|sarif 是机器可读的镜子 --external 检查非原产地链接——产品中接触网络的一面旗帜. 虽然 unify dev 正在运行中, 同样的发现是一个活页 http://localhost:3000/_unify/,按页面分类,并附有每一页的记录.
捐款
见 捐款额发展设置:
git clone https://github.com/fwdslsh/unify
cd unify
bun install
bun test
许可证
Mozilla公共许可证2.0。 见 自由主义。 。 。 .