開發紀錄
舊檔案裡有元件,不代表原站真的有這個功能
從一個未掛載的作品篩選元件出發,說明如何沿著入口、import、掛載與實際輸出,判斷舊程式碼是不是原站功能。
- 架構重構
- 元件掛載
- 功能驗證
- Vue
- Astro
重構舊網站時,檔案清單很容易被誤當成功能清單。某個 SideFunctionBar.vue 真的存在,裡面也真的寫了 React、Vue 和 Vanilla JS 的篩選按鈕,但這兩件事只證明它曾經被寫進專案,不能直接證明原站的使用者看過或操作過這組介面。
一個功能至少要能沿著公開入口追到實際掛載,再追到使用者操作和可見結果。檔案存在是取證的起點,不是功能成立的結論。
把「存在」拆成不同證據
| 證據 | 可以確認什麼 | 還不能確認什麼 |
|---|---|---|
| 檔案存在 | 專案曾保存這份程式碼 | 它曾被頁面載入或顯示 |
| 元件內有完整邏輯 | 作者曾經寫過一條可能的行為路徑 | 這條路徑有沒有接到入口 |
| 有 store、資料或樣式 | 可能存在配套的狀態與呈現準備 | 使用者能不能觸發它 |
| 被路由或父元件 import | 執行時有機會進入這個元件 | 每個操作和狀態變化都真的有效 |
| HTML 或瀏覽器看得到結果 | 在檢查的環境中,功能確實被輸出或執行 | 所有歷史版本和所有部署環境都相同 |
這幾層不能互相代替。看到元件檔案時,最多只能先把它列為「待追查的實作候選」;要把它寫成原站功能,還需要往下找到入口和行為證據。
作品篩選元件的實際追查
這次的舊 Vue 專案裡有一個 SideFunctionBar.vue。它包含三個按鈕,分別用來切換 React、Vue 和 Vanilla JS,並透過 filterKeywords 改變作品篩選條件。單看檔案內容,很容易得到「原站有技術篩選列」的印象。
沿著應用程式入口往下查,看到的關係卻是:
App.vue → AppShell.vue → router-view → WorkViews.vue
AppShell.vue 負責共用外殼和路由內容,沒有把 SideFunctionBar.vue 放進外殼;WorkViews.vue 也沒有 import 這個元件。作品頁本身確實讀取 filterKeywords,也有比對作品 tag 的函式,但頁面模板實際顯示的是網站/系統與內容/視覺兩種作品類別切換,不是那三個技術按鈕。
這裡要分清楚兩件事:
- 篩選狀態和比對邏輯存在,代表專案裡曾經留下這條設計方向。
SideFunctionBar.vue沒有接進應用程式的掛載鏈,代表在這條可追溯的入口中,沒有證據顯示使用者能操作它。
較準確的標記是:它是未被目前入口證實的殘留實作,不能當成原站已提供的公開功能。
重構時保留真正存在的行為
因此,重構時保留的是原本有明確入口的作品類別切換,而不是把看起來合理的技術篩選一起搬過去。
目前的 Astro 作品頁仍然輸出兩個原生連結,分別指向 #development 和 #design。瀏覽器腳本讀取 [data-work-type],依 hash 顯示對應區塊,並同步 aria-current。作品資料裡的技術 tags 仍然可以在卡片上顯示,但它們是作品資訊,不是另一個尚未證實的篩選控制。
這個差異很小,卻會改變重構結果。若只看舊檔案,新的頁面可能會多出一組技術按鈕;沿著入口和實際模板核對後,才知道原本需要還原的是作品類別,而不是擴充一個沒有被掛載的側邊功能。正式輸出檢查也特別確認產出的 HTML 沒有把 dormant sidebar 的 data-filter 控制帶回頁面。
一個舊元件要怎麼判斷
可以依照下面的順序查,不要先從檔名猜結論:
- 先找公開入口。 從路由、頁面入口或應用程式外殼開始,確認讀者是怎麼進到這個功能所在的頁面。
- 追 import 和模板掛載。 檔案有沒有被目前入口或父元件引用?只有被某個資料夾裡的其他檔案引用,還不代表它在正式頁面上。
- 追事件和狀態的寫入點。 元件裡有
click、store 或篩選函式,不代表真的有控制可以觸發它。要找到從可見控制到狀態變化的完整路徑。 - 看輸出而不是只看原始碼。 檢查初始 HTML、建置產物或實際瀏覽器畫面,確認那個控制真的出現,結果也真的會改變。
- 把結論分級。 可以標成已掛載且可操作、已掛載但行為不完整、只有殘留邏輯,或目前證據不足。不要把這四種狀態都寫成「已有功能」。
這套順序同樣適用於動畫元件、舊版導覽、看似完整的表單和只留下資料欄位的功能。元件名稱再有說服力,也不能代替它和入口之間的關係。
這種查法能證明到哪裡
repository 可以證明被保存下來的程式、可追溯的 import 關係,以及檢查環境產生的輸出。它不能自動證明所有歷史部署都使用同一份程式,也不能排除沒有提交進 repository 的實驗版本。
所以這篇的判斷範圍是:針對能追到的應用程式入口和產出,SideFunctionBar.vue 沒有被證實為原站可操作的公開功能。這不延伸成對所有歷史版本的斷言,也不把未掛載的元件當成需要在新站補回的需求。
重構不是把所有舊檔案搬到新框架,而是重新確認哪些內容和行為真的有證據。先把入口和可見結果查清楚,再決定哪些舊程式值得保留;檔案名稱本身不會把一段程式變成功能。