Skip to content

檢測與 config 總表

本頁彙整 blueprint 所有查得到的東西,以及指南各頁沒逐一說明的 config 欄位。完整型別簽名見 API 文件;本頁的定位是索引地圖。

inspect 回報的檢測項目

共九種檢測。只要有 error 等級的違規,就以 exit code 1 結束;warninfo 只提示、不影響檢核結果。測試檔案(architecture.testFiles)一律豁免。

規則等級檢測內容
undeclared-foldererror原始碼根目錄下存在未宣告為分層的資料夾
flow-violationerror逆向匯入,或透過別名進行的同層匯入
deep-importerror別名匯入直接觸及資料夾模組的內部,未經公開入口
relative-escapeerror相對路徑匯入越出所屬模組,或逃逸出原始碼根目錄
package-ownershiperror從非擁有者分層匯入某分層專屬的套件(或受限的具名匯入)
selfonly-reexporterror再匯出標記為 selfOnly 的依賴 —— 僅可依賴,不可轉手輸出
cycleerror模組層級的循環匯入,並列出完整路徑
no-entrywarn資料夾模組缺少公開入口檔 —— 外部無從匯入
missing-layerinfo已宣告的分層尚無對應資料夾

既有專案可透過 baseline 棘輪,把這份清單轉成「只攔新增的違規」。

內嵌 ESLint 外掛

emitLint 在生成的 config 裡內建六條自訂規則 —— 不用額外安裝。其中一條是結構規則、永遠開著;其餘五條由 blueprint.rules 的規則識別碼控制:

ESLint 規則控制來源強制內容
blueprint/relative-escape恆常啟用(結構規則)相對路徑匯入不得越出所屬模組 —— 與 inspect 同名檢測共用同一套解析邏輯
blueprint/no-deep-watchrules.deepWatch禁用 deep: true 的監聽 —— 每次變更都會遍歷整個資料來源(Vue 預設藍圖:error
blueprint/use-prefixrules.usePrefixhook 分層匯出的函式必須帶 use 前綴(分層與前綴皆可設定)
blueprint/use-prefix-needs-reactivityrules.usePrefixReactivityuse 前綴的檔案必須實際呼叫 reactive 或生命週期 API
blueprint/test-filename-matches-sourcerules.testFilename測試檔必須有同目錄、同名的原始碼檔案
blueprint/no-typedef-only-filerules.typedefOnlyFileJS 檔案不得僅含 @typedef 宣告(僅套用於 .js

另有三條受管規則 —— 由 layers / owns / alias 轉譯而成、歸生成器管:no-restricted-importsno-restricted-syntaxno-restricted-globals。這三條沒辦法透過 lintOverrides 設定;要調整就改 blueprint config 本身。

blueprint.rules —— 哪些識別碼會成為檢核關卡

blueprint.rules 裡的識別碼,只有機器查得動的才會轉譯成 lint 關卡。查得動的集合如下:

識別碼編譯目標預設藍圖的設定
maxLinesmax-lineserror · 400
maxLinesPerFunctionmax-lines-per-functionwarn · 100
maxParamsmax-paramswarn · 3
maxStatementsmax-statementswarn · 15
complexitycomplexitywarn · 12
unusedVarsno-unused-vars(TypeScript 專案自動改用 TS 感知版本)error
fixtureImports禁止產品程式碼匯入 fixture 目錄error(Vue 預設藍圖)
cyclesinspect 的 cycle 檢測(模組層級;生成 config 已不再帶 import/no-cycle —— 它逐檔重查同一張圖,850 檔實測要 92 秒)error
deepWatch / usePrefix / usePrefixReactivity / testFilename / typedefOnlyFile上表的外掛規則見上表

其餘任何識別碼(例如 deadCode)都屬於文件性質:會寫進手冊與 AI Agent 守則,作為 Agent 必須持守的判斷,但不會被說成硬性關卡。這個劃分就是三級落點的機制。

一個實戰會咬人的範圍細節:emit.lint.severity 只蓋結構家族no-restricted-imports / -syntax / -globalsblueprint/relative-escape)。上表每條規則都吃自己的 blueprint.rules tier —— severity 設 warn 不會maxLinesunusedVars 變安靜。

快速上手範例以外的 config 欄位

快速上手defineBlueprint 範例涵蓋核心欄位。其餘欄位一覽如下 —— 完整結構見 API 文件

欄位用途
architecture.sourceRoot分層所在目錄(相對於專案根目錄)。預設 src;根目錄式佈局(如無 src/ 的 Next.js)設為 .
architecture.additionalAliasesalias 以外、同樣納入所有結構禁令的額外匯入根
architecture.testFiles豁免於結構規則與度量關卡的測試檔樣式(預設 *.test.* / *.spec.*
architecture.layerFiles / layerFilesIgnore框架預設樣式不適用時,逐層指定檔案樣式
architecture.naming依概念設定的命名慣例(如 { hook: 'useX + reactivity' })—— 寫入手冊與契約
layer.module逐層覆寫共用的模組形狀 —— 例如某一分層採資料夾模組、其餘維持單檔
layer.lintOverrides逐層的 ESLint 調整(三條受管規則除外)
emit.agentsAgent 守則的發佈目標:claudeagentsgeminicopilotcursorwindsurf(可逐目標指定 path)。預設 ['claude', 'agents'];空陣列就不產出
emit.handbook / emit.ci / emit.lint手冊輸出路徑 · CI 供應商(github / none)· lint config 路徑+結構規則的等級(度量規則吃自己的 rules tier)

命令列旗標

指令旗標
init--agent claude|codex(啟動編寫用的 Agent CLI)· --preset(強制建 preset)· --authoring(即使小 repo 也強制產 playbook;與 --preset 相反)· --framework vue|react · --no-install · --dry-run
survey--alias <name>(tsconfig paths 偵測不到別名時指定)· --json
inspect--baseline · --update-baseline · --framework vue|react · --json
impact--framework vue|react · --json
deps [module]--framework vue|react · --json
doctor--framework vue|react · --json

所有指令都支援 --help;CLI 本身支援 --version