)
Ghost 動手改代碼前如何判斷功能處于什么遷移階段Active、Exploring 與 Planned 狀態(tài)【免費(fèi)下載鏈接】GhostIndependent technology for modern publishing, memberships, subscriptions and newsletters.項(xiàng)目地址: https://gitcode.com/GitHub_Trending/gh/Ghost在 Ghost 代碼庫里改代碼之前有一個(gè)繞不開的前置判斷你要?jiǎng)拥哪菈K功能當(dāng)前處于哪種遷移階段Ghost 正在同時(shí)推進(jìn) Ember 管理后臺向 React 遷移、JavaScript 向 TypeScript 遷移、CommonJS 向 ESM 遷移等多條遷移線倉庫里最常見的寫法往往是遺留模式而不是你應(yīng)該照抄的模式。判斷依據(jù)只有一個(gè)事實(shí)來源docs/codebase/direction.md。這份文檔明確記錄每個(gè)方向的當(dāng)前狀態(tài)并且聲明Ghost 7.0 計(jì)劃于 2027 年上半年發(fā)布該文檔描述的正是通向這個(gè)版本的工作方向它不是路線圖也不是一次遷移完所有東西的承諾。三個(gè)狀態(tài)術(shù)語的確切含義direction.md 用三個(gè)術(shù)語描述每個(gè)遷移方向所處的階段改代碼前先確認(rèn)自己面對的是哪一種Active migration活躍遷移新工作走新路徑同時(shí)存量代碼以連貫的單元逐步遷過來。Exploring探索中方向已經(jīng)達(dá)成共識但實(shí)現(xiàn)模式還在摸索尚無定論。Planned已計(jì)劃具體變更已確定要發(fā)生但遷移尚未開始。這個(gè)區(qū)分直接決定你的寫法Active 意味著新功能必須走新路徑Exploring 意味著方向定了但模式?jīng)]定先跟隨鄰近的成熟實(shí)現(xiàn)別自己發(fā)明框架Planned 意味著舊契約目前仍受支持但不要再基于它構(gòu)建新功能。在狀態(tài)表中定位你要改的區(qū)域打開 docs/codebase/direction.md核心內(nèi)容是一張Direction at a glance狀態(tài)表按區(qū)域列出遷移方向和當(dāng)前狀態(tài)以下為該表當(dāng)前內(nèi)容區(qū)域遷移方向狀態(tài)Admin UIEmber 到 ReactActive migrationApplication codeJavaScript 到 TypeScriptActive migrationNode.js modulesCommonJS 到 ESMActive migrationRuntime boundaries用 Zod 校驗(yàn)未知數(shù)據(jù)ExploringServer dependencies注入有狀態(tài)依賴ExploringData accessBookshelf 到 services、repositories、KnexExploringServer state實(shí)例可互換、無狀態(tài)Active migrationRepository layout相關(guān)項(xiàng)目合并進(jìn) monorepoActive migrationDevelopment patterns為重復(fù)性工作建立 golden pathExploringDatabase supportGhost 7.0 移除 SQLitePlannedEditor contentGhost 7.0 移除 MobiledocPlannedSelf-hostingGhost 7.0 棄用 Ghost-CLI改用 DockerActive migrationNode.js runtime跟上 Node CurrentPlannedAuthentication基于 Better Auth 的標(biāo)準(zhǔn)化認(rèn)證ExploringLintingESLint 到 OxlintPlanned如果你的任務(wù)落在表中某個(gè)區(qū)域按那一行的狀態(tài)行事如果表中沒有對應(yīng)行說明該方向未被列為當(dāng)前遷移項(xiàng)按就近的現(xiàn)有實(shí)現(xiàn)處理即可。各狀態(tài)對應(yīng)的操作規(guī)則Active migration新功能必須走新路徑以 Admin UI 為例。apps/admin/README.md 說明新的 React 管理后臺通過 Ember Bridge 漸進(jìn)替換 Ember 管理后臺已遷移到 React 的路由渲染 React 組件未遷移的路由回落到 Ember兩者共享同一 UI 空間。direction.md 對此的要求是新 Admin 功能在apps/admin/中構(gòu)建用admin-x-framework做 API 訪問、用 Shade 做 UI不要因?yàn)楣δ艿呐f版本是 Ember 就新增 Ember 路由或繼續(xù)用 Ember。遷移既有 Ember 功能時(shí)要在連貫的產(chǎn)品邊界上進(jìn)行并保留跨橋的導(dǎo)航、認(rèn)證、共享狀態(tài)和舊服務(wù)端行為。服務(wù)端代碼同理。ghost/core/core/server/services/README.md 規(guī)定新的獨(dú)立 service 邏輯默認(rèn)用 TypeScript除非必須擴(kuò)展現(xiàn)有 JavaScript 模塊domain 邏輯用 TypeScript 加命名導(dǎo)出只在 boot 代碼或既有require()邊界保留薄薄的 CommonJS 包裝。內(nèi)部包層面packages/README.md 規(guī)定新的內(nèi)部包是 TypeScript-only 的 ESM 包tryghost/name、type: module、私有、不發(fā) npm release并從packages/_template起步每個(gè)私有包在ghostPackage.goldenPath中聲明生命周期狀態(tài)——compliant表示按 golden path 機(jī)械檢查migration是等待后續(xù)現(xiàn)代化 PR 的臨時(shí)態(tài)exempt是記錄在案的長期例外后兩者必須帶非空ghostPackage.reason。Exploring方向已定、模式未定跟隨鄰近實(shí)現(xiàn)Zod 是新的 runtime 邊界首選校驗(yàn)庫從 HTTP、數(shù)據(jù)庫、配置、隊(duì)列、第三方服務(wù)到達(dá)的數(shù)據(jù)在校驗(yàn)前應(yīng)視為unknown但 direction.md 明確說明 schema 的歸屬與共享方式還沒有統(tǒng)一布局此時(shí)的正確做法是跟隨一個(gè)已驗(yàn)證的鄰近實(shí)現(xiàn)、保持一種形狀只有一個(gè)真相來源而不是自己拼一套手寫校驗(yàn)。數(shù)據(jù)訪問方向Bookshelf 到 services/repositories/Knex同樣處于 Exploring完整模式未定不要新建 Bookshelf model、不要往 model 生命周期鉤子里加新業(yè)務(wù)邏輯在既有 Bookshelf 功能里工作時(shí)先把行為收攏到顯式的 service 或 repository 接縫后面再替換持久化不要為了繞開 model 而繞開既有行為。Exploring 狀態(tài)還有一個(gè)明確約束把已同意的方向當(dāng)作設(shè)計(jì)約束而不是允許你發(fā)明局部框架實(shí)現(xiàn)模式不清楚時(shí)先把它定下來再往代碼庫其他位置復(fù)制。Planned變更已確定但未開始保留契約但不要圍繞它建新功能SQLite 與 Mobiledoc 都在 7.0 計(jì)劃移除Ghost 目前通過better-sqlite3支持 SQLite舊配置名sqlite3仍兼容但不要新增 SQLite 專屬行為也不要假設(shè) SQLite 會長期是受支持的生產(chǎn)數(shù)據(jù)庫。自托管方向上 Ghost-CLI 將在 7.0 被棄用、以 Docker 取代。在這些契約被移除之前保留現(xiàn)有行為在新功能里不要依賴它們。Node.js 版本支持屬于 Planned長期跟上 Node Current當(dāng)前事實(shí)是Ghost 支持 Node.js 22 和 24CI 同時(shí)測試這兩條線新代碼和新依賴必須兩者都能跑。判斷版本支持時(shí)查 docs/reference/node-compatibility.md 的兼容表不要根據(jù)本機(jī)裝的版本推斷。動手前的核對步驟以下命令均來自倉庫文檔在 monorepo 根目錄或?qū)?yīng)包目錄下執(zhí)行確認(rèn)本地環(huán)境可用新 checkout 時(shí)pnpm setup pnpm devpnpm dev會同時(shí)啟動 MySQL、Redis 容器以及 Admin 和 Portal 的 dev watcher主站位于http://localhost:2368管理后臺位于http://localhost:2368/ghost/見 docs/README.md。確認(rèn)你所在包符合 golden path改動packages/下的內(nèi)部包時(shí)pnpm lint:packages該命令校驗(yàn)ghostPackage.goldenPath狀態(tài)以及所有可機(jī)械執(zhí)行的規(guī)則packages/README.md。改動 Admin 時(shí)確認(rèn)部署兼容性Admin 與 Core 可以不同時(shí)間部署。依賴新設(shè)置、新端點(diǎn)或新配置值的新 Admin UI 必須檢測后端支持并在缺失時(shí)隱藏或安全禁用該功能——只有 Labs flag 不算兼容性檢查因?yàn)?flag 可能先于支持它的后端版本存在。apps/admin/README.md 要求為舊后端場景補(bǔ)驗(yàn)收測試。交接前跑倉庫統(tǒng)一的校驗(yàn)命令見 docs/contributing/workflow.mdpnpm checkpnpm check依次執(zhí)行pnpm format:check、pnpm lint、pnpm test但不包含瀏覽器 E2E 套件和 Ember Admin 測試——當(dāng)你的改動落在這些區(qū)域時(shí)需要按測試指南另行運(yùn)行對應(yīng)測試。在過渡代碼中工作的邊界direction.md 對Working in transitional code給出了硬性約束這些約束獨(dú)立于任何具體功能不要假設(shè)數(shù)量最多的模式就是被偏好的模式存在受支持的新路徑時(shí)不要擴(kuò)大遺留依賴遷移要遷一個(gè)連貫的邊界連同它的測試和兼容行為不要把大范圍清理混進(jìn)無關(guān)變更漸進(jìn)遷移需要新舊兩條路徑共存時(shí)兩條都要保留當(dāng)工作在不同階段之間移動、某次遷移完成、或某個(gè)計(jì)劃中的工具變成權(quán)威依據(jù)時(shí)更新 direction.md 本身。最后的限制要說清楚狀態(tài)表是某一時(shí)點(diǎn)的快照開始一個(gè)跨天的任務(wù)前重新核對當(dāng)前main上的 direction.md當(dāng)某個(gè)區(qū)域已有專門的聚焦指南如 authentication.md、services 指南實(shí)現(xiàn)細(xì)節(jié)以那份指南為準(zhǔn)direction.md 只提供審查方向?!久赓M(fèi)下載鏈接】GhostIndependent technology for modern publishing, memberships, subscriptions and newsletters.項(xiàng)目地址: https://gitcode.com/GitHub_Trending/gh/Ghost創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考