<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title>升级迁移 on OINK</title>
		<link>https://oink.pgsty.com/zh/docs/upgrade/</link>
		<description>Recent content in 升级迁移 on OINK</description>
		<generator>Hugo</generator>
		<language>zh-CN</language>
		
		
		
		
			<atom:link href="https://oink.pgsty.com/zh/docs/upgrade/index.xml" rel="self" type="application/rss+xml" />
			<item>
				<title>升级 Oink Hugo Module</title>
				<link>https://oink.pgsty.com/zh/docs/upgrade/hugo-module/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://oink.pgsty.com/zh/docs/upgrade/hugo-module/</guid>
				<description>&lt;h2 id=&#34;pin-a-version&#34;&gt;固定版本&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#pin-a-version&#34; aria-label=&#34;Heading self-link&#34;&gt;&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;生产站点应导入发布标签或不可变的 commit，绝不能跟随未固定版本的分支。在站点根目录，把 Oink 更新到指定 ref：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;hugo mod get github.com/pgsty/oink@THEME_REF&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;hugo mod tidy&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;将 &lt;code&gt;THEME_REF&lt;/code&gt; 替换为该版本发布说明指定的根标签或 commit。&lt;/p&gt;&#xA;&lt;h2 id=&#34;test-a-local-checkout&#34;&gt;测试本地 checkout&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#test-a-local-checkout&#34; aria-label=&#34;Heading self-link&#34;&gt;&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;如果要在不修改已提交模块版本的前提下测试本地 OINK checkout，请使用被忽略的 Go&#xA;workspace：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;go work init .&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;go work edit -replace&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;github.com/pgsty/oink&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/absolute/path/to/oink&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;HUGO_MODULE_WORKSPACE&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;go.work&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;hugo --gc --minify&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;不要把包含开发者机器专属绝对路径的 &lt;code&gt;go.work&lt;/code&gt; 提交到仓库。&lt;/p&gt;&#xA;&lt;h2 id=&#34;verify-the-resolved-module&#34;&gt;验证解析出的模块&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#verify-the-resolved-module&#34; aria-label=&#34;Heading self-link&#34;&gt;&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;检查 Hugo 的依赖图：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;hugo mod graph&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;确认主题解析到预期的标签、commit 或本地 replacement。OINK 不需要运行&#xA;&lt;code&gt;hugo mod npm pack&lt;/code&gt; 或 &lt;code&gt;npm install&lt;/code&gt;，因为浏览器依赖已经随主题提供。&lt;/p&gt;&#xA;&lt;p&gt;随后继续&lt;a href=&#34;https://oink.pgsty.com/zh/docs/upgrade/#update-overrides&#34;&gt;审查主题覆盖&lt;/a&gt;。&lt;/p&gt;</description>
			</item>
			<item>
				<title>升级 Oink Git submodule 或克隆</title>
				<link>https://oink.pgsty.com/zh/docs/upgrade/git/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://oink.pgsty.com/zh/docs/upgrade/git/</guid>
				<description>&lt;p&gt;请根据安装方式选择相应步骤：&lt;a href=&#34;https://oink.pgsty.com/zh/docs/upgrade/git/#update-the-submodule&#34;&gt;submodule&lt;/a&gt;&#xA;或&lt;a href=&#34;https://oink.pgsty.com/zh/docs/upgrade/git/#update-the-clone&#34;&gt;克隆&lt;/a&gt;。两种方式都必须固定到目标版本标签或不可变的 commit。&lt;/p&gt;&#xA;&lt;h2 id=&#34;update-the-submodule&#34;&gt;更新 submodule&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#update-the-submodule&#34; aria-label=&#34;Heading self-link&#34;&gt;&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;在站点根目录进入主题仓库获取标签，并 checkout 目标 ref：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git -C themes/oink fetch --tags&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git -C themes/oink checkout THEME_REF&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git add themes/oink&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git commit -m &lt;span class=&#34;s2&#34;&gt;&amp;#34;Update OINK theme to THEME_REF&amp;#34;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;如果站点使用其他目录名，请相应替换 &lt;code&gt;themes/oink&lt;/code&gt;。父仓库会记录最终的 submodule&#xA;commit。请推送这次父仓库提交，确保 CI 和其他贡献者解析到完全相同的源码。&lt;/p&gt;&#xA;&lt;p&gt;无需安装任何 npm 软件包。如果某个发行版的完整主题包含仅供源码使用的嵌套 submodule，请按照该版本的说明初始化；OINK 发行物所需的浏览器运行时资源已经包含在内。&lt;/p&gt;&#xA;&lt;h2 id=&#34;update-the-clone&#34;&gt;更新克隆&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#update-the-clone&#34; aria-label=&#34;Heading self-link&#34;&gt;&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;如果主题目录是由站点跟踪或恢复的克隆，请将其更新到目标 ref：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git -C themes/oink fetch --tags&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git -C themes/oink checkout THEME_REF&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;沿用站点现有的可复现方式，提交、归档或记录更新后的主题。不要让生产构建持续跟随&#xA;&lt;code&gt;main&lt;/code&gt;。&lt;/p&gt;&#xA;&lt;p&gt;如果克隆中包含本地修改，请在切换 ref 前把它们提交到分支。更新后再通过 rebase 或其他方式重新应用，并显式解决冲突。可复用的修改应尽量回馈 OINK；消费站点只保留真正属于站点的覆盖。&lt;/p&gt;&#xA;&lt;p&gt;随后继续&lt;a href=&#34;https://oink.pgsty.com/zh/docs/upgrade/#update-overrides&#34;&gt;审查主题覆盖&lt;/a&gt;。&lt;/p&gt;</description>
			</item>
			<item>
				<title>从 Docsy npm 包迁移</title>
				<link>https://oink.pgsty.com/zh/docs/upgrade/npm-package/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://oink.pgsty.com/zh/docs/upgrade/npm-package/</guid>
				<description>&lt;p&gt;上游 &lt;code&gt;@docsy/theme&lt;/code&gt; npm 包不是 OINK 的发行渠道。OINK 将 Bootstrap、Font&#xA;Awesome、字体和浏览器运行时直接随主题提供，因此消费站点只需 Hugo&#xA;Extended 即可构建。&lt;/p&gt;&#xA;&lt;h2 id=&#34;remove-the-npm-theme-integration&#34;&gt;移除 npm 主题集成&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#remove-the-npm-theme-integration&#34; aria-label=&#34;Heading self-link&#34;&gt;&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;首先选择一种 OINK 发行方式：固定版本的归档、Git&#xA;submodule 或克隆，或者兼容 Hugo 模块。让 Hugo 能够访问该主题，并确认执行&#xA;&lt;code&gt;hugo --gc --minify&lt;/code&gt; 时可以正确解析。&lt;/p&gt;&#xA;&lt;p&gt;随后，从站点的 &lt;code&gt;package.json&lt;/code&gt; 中移除&#xA;&lt;code&gt;@docsy/theme&lt;/code&gt;，以及仅用于构建 Docsy 资源的依赖。删除 Hugo 配置中 Bootstrap 和 Font&#xA;Awesome 的 npm 挂载项，同时删除只为旧主题管线存在的 PostCSS 与 Autoprefixer 构建步骤。&lt;/p&gt;&#xA;&lt;p&gt;不要仅仅因为某项应用依赖使用 npm 就将其删除。Hugo-only 合同针对文档主题；站点自有应用或业务组件仍可能采用另一套明确且必要的工具链。&lt;/p&gt;&#xA;&lt;h2 id=&#34;verify-the-migration&#34;&gt;验证迁移&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#verify-the-migration&#34; aria-label=&#34;Heading self-link&#34;&gt;&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;从全新 checkout 开始，只安装 Hugo Extended，不创建 &lt;code&gt;node_modules&lt;/code&gt;&#xA;目录，然后执行：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;hugo --gc --minify&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;如果站点同时支持 LTR 和 RTL 页面，请分别检查。还要验证本地字体与图标、搜索、图表、API 文档和所有已经迁移的内容组件。构建完全正常后，只有在站点自有工具也不再使用 lockfile 时，才可以删除过时的 lockfile。&lt;/p&gt;</description>
			</item>
			<item>
				<title>迁移现有 Docsy 站点</title>
				<link>https://oink.pgsty.com/zh/docs/upgrade/migrate-from-docsy/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://oink.pgsty.com/zh/docs/upgrade/migrate-from-docsy/</guid>
				<description>&lt;p&gt;OINK 旨在替换各站点复制的公共外壳、运行时与短代码，而无需批量重写普通正文。安全迁移应按依赖关系删除覆盖项，把产品专用行为留在站点，并在修改生产环境前先验证临时副本。&lt;/p&gt;&#xA;&lt;h2 id=&#34;migration-principles&#34;&gt;迁移原则&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#migration-principles&#34; aria-label=&#34;Heading self-link&#34;&gt;&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;固定目标实现，不要把生产站点迁移到未固定版本的分支。&lt;/li&gt;&#xA;&lt;li&gt;删除覆盖项之前先完成清点。&lt;/li&gt;&#xA;&lt;li&gt;删除公共主题副本，不删除站点业务逻辑。&lt;/li&gt;&#xA;&lt;li&gt;在 OINK API 兼容的地方，保持内容 URL、front matter 与短代码行为不变。&lt;/li&gt;&#xA;&lt;li&gt;unsafe 或在线例外必须显式声明，并且只在过渡期使用。&lt;/li&gt;&#xA;&lt;li&gt;分别测试构建产物、浏览器行为与托管站点行为。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;pin-the-target&#34;&gt;固定目标版本&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#pin-the-target&#34; aria-label=&#34;Heading self-link&#34;&gt;&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;请在 &lt;code&gt;go.mod&lt;/code&gt; 中固定已发布标签，或使用完整的版本化归档。预发布评估期间，Hugo&#xA;Module 站点可以使用被忽略的 Go&#xA;workspace，在不修改已提交模块版本的情况下解析本地 checkout：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;go work init .&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;go work edit -replace&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;github.com/pgsty/oink&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/absolute/path/to/oink&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;HUGO_MODULE_WORKSPACE&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;go.work&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;hugo --gc --minify&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;站点的 &lt;code&gt;hugo.yaml&lt;/code&gt; 导入 &lt;code&gt;github.com/pgsty/oink&lt;/code&gt;；workspace 只替换本地 checkout。&lt;/p&gt;&#xA;&lt;h2 id=&#34;inventory-existing-overrides&#34;&gt;清点现有覆盖项&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#inventory-existing-overrides&#34; aria-label=&#34;Heading self-link&#34;&gt;&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;把每个站点级文件归入以下四类之一：&lt;/p&gt;&#xA;&lt;table&gt;&#xA;&#x9;&lt;thead&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;th&gt;类别&lt;/th&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;th&gt;处理方式&lt;/th&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&lt;/thead&gt;&#xA;&#x9;&lt;tbody&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;公共外壳的完全或近似副本&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;OINK 验证通过后删除&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;OINK 已提供的可复用组件&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;删除或机械重命名&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;范围明确的品牌或产品定制&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;保留，再缩小到最小 hook&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;业务专用数据或交互&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;留在站点&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;p&gt;&lt;code&gt;layouts/&lt;/code&gt;、&lt;code&gt;assets/&lt;/code&gt;、&lt;code&gt;static/&lt;/code&gt;、配置与构建工作流必须一起检查。复制的短代码通常还伴随一份 JavaScript&#xA;bundle、样式表、vendor 文件和 CI 安装步骤。&lt;/p&gt;&#xA;&lt;h2 id=&#34;move-configuration&#34;&gt;迁移配置&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#move-configuration&#34; aria-label=&#34;Heading self-link&#34;&gt;&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;h3 id=&#34;search-and-brand&#34;&gt;搜索与品牌&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#search-and-brand&#34; aria-label=&#34;Heading self-link&#34;&gt;&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;启用主题提供的本地搜索，并让外壳使用站点自己的 Logo：&lt;/p&gt;</description>
			</item>
	</channel>
</rss>
