Loading...
累積訪問: 12744 次
2023-04-12
當我第一次接觸 Flutter 時,它還是一個在 2018 年初的嬰兒專案。如今,它變得比 React Native 更受歡迎 —— 這是我過去開源領域的舊愛。我目前所在的公司決定使用 Flutter 開發一個應用程式,作為公司裡最弱的企鵝,我被迫加入了這個專案。
Flutter 變得更加穩定和功能豐富,但它仍然存在一些從未修復的錯誤,以及一些多年前就應該處理的問題。其中一個問題是,他們應該在構建過程中清理未使用的圖片。這是一個大問題,因為沒有簡單的方法來刪除它們以減少構建包的大小。很難找到一個庫/腳本來刪除它們,所以為什麼不自己寫一個呢?
首先,我需要弄清楚應該刪除什麼樣的圖片,有兩種處理圖片的方法:先讀取圖片或先讀取文件。我決定先獲取 assets 文件夾中所有圖片的名稱,以記錄被引用的次數。這是一個好習慣,可以預期和考慮未來可能的功能。此外,隨著專案規模的增長,代碼文件的數量總是比圖片數量多。
我考慮的下一步是應該使用什麼樣的技術。我可以使用 Bash 來實現,但我認為用 Dart 編寫會更好,這樣其他 Flutter 開發者可以更容易閱讀。
所以流程將是:
邏輯很清晰,但在開發過程中我仍然遇到了一些問題,你永遠不會知道你的同事會用多少技巧。
這是我同事實現圖片路徑的方式之一:
account_vip$vipLvl.webp
好吧,我仍然可以寫一個正則表達式來修復它。
RegExp(r'(\d+)(?=_|\@|\.)')
然後我再次運行腳本並運行應用程式,然後,我看到了同事們的一些黑魔法。
SomeWidget(
image: 'account_vip',
extension: 'webp'
)
誰做的代碼審查?!
所以我仍然需要寫一些模糊搜索,所以我決定先檢查代碼文件是否包含任何圖片文件名,然後用正則表達式逐行檢查圖片名稱。此外,我決定進行非常粗略的匹配,以防某些同事在不同層級硬編碼擴展名。
與上述挑戰相比,將我的庫發布到 pub.dev 並不困難。唯一的問題是沒有關於全局庫標準的文檔,我嘗試了三個版本來全局運行腳本,這只包括一些文件名更改。
第一次只需註冊 pub.dev 並運行以下命令
dart pub publish --dry-run
第二次應該移除 --dry-run
dart pub publish
一切都完成了,我發布了我的第一個 Flutter 包。這個命令在我們公司的實際專案中使用,並放入 CI/CD 中。