如何在Flutter使用 Makefile 節省你的時間?

Yii Chen
7 min readAug 17, 2022

瑣碎的事情都讓 Makefile 幫你處理吧

聰明的使用工具來提升效率,是開發者需要重視的一環。而在進行Flutter開發時,多少都會需要透過指令來幫我們執行任務,例如:清理環境、取得套件還有生成.g檔案等等,我想這些操作大家應該都熟悉到不行了吧。但是要用的時候難免會忘記指令或是參數,甚至要花幾秒打完後才能執行,不覺得這些瑣碎的事情應該要有工具幫忙嗎?

Makefile就是那個重要的工具,可以大大幫助開發者,提高效率、節省時間。而且只需要寫好一個屬於自己或團隊的工具包,之後在每個專案都能直接拿來使用。

提醒:Makefile檔案沒有副檔名,也可以使用makefile

Target

  • 一個目標、一個任務
  • 通常都會以它負責的工作是什麼來命名
  • 在 target 後方可以新增其他 target,依賴或連結其他 target,等待任務都完成後才運行主要任務
  • 命令與代碼都需要在前面添加tab空間(不能使用空格)
make <target>

.PHONY

  • 默認情況下 target 在執行時會生成對應檔案
  • 但是如果內容只有單純執行某些命令,可以告訴 Makefile 不要生成target 檔案
  • 在文件頂端使用 .PHONY,並指定 target

clean: 清理專案環境

clean: ## Clean the environment.
@rm -rf pubspec.lock
@flutter clean

get: 取得套件

get: ## Get pub packages.
@flutter pub get

upgrade: 升級套件

upgrade: ## Upgrade pub packages.
@flutter pub upgrade

clean_get: 清除環境並重新取得套件

  • 在 target 後方給予依賴的其他 target,結合其他任務處理
  • 後方的依賴先依序完成之後,才會執行主體的代碼
clean_get: clean get ## Get packages after cleaning the environment.

lint: 分析代碼

  • 當分析到有問題時,顯示自訂義的錯誤訊息
lint: ## Analyze the code and find issues.
@dart analyze . || (echo "Error in analyzing, some code need to optimize."; exit 99)

format: 代碼整理

format: ## Format the code.
@dart format .

run_unit_test: 單元測試

run_unit_test: ## Run unit tests.
@flutter test || (echo "Error in testing."; exit 99)

run_dev: 運行Dev

run_dev: ## Run app in dev.
@flutter run || (echo "Error in running dev."; exit 99)

run_web_dev: 在Web運行Dev

run_web_dev: ## Run web in dev.
@flutter run -d chrome --dart-define=ENVIRONMENT=dev

build_runner: 自動生成代碼

build_runner: ## Run build_runner and generate files automatically.
@flutter pub run build_runner build --delete-conflicting-outputs

commit: 將更新提交到Git

  • 依賴 formatlintrun_unit_test
  • 在提交之前先跑幾個步驟,格式化代碼、分析代碼、確保測試正常
commit: format lint run_unit_test ## Commit to Git.
@git add .
@git commit

all: 預設target

  • 當使用指令 make 沒有帶入指定target時,會執行all任務
  • 範例依賴了其他3個target,會先依序執行完成,如果依賴在處理過程有出錯,會立即停止後續運行

這邊我預設要將APP在dev運行起來,前面會先分析代碼是否有問題,接著進行代碼格式化,保持閱讀性與品質。

all: lint format run_dev

help: 指令列表

  • 查看有哪些指令,也可以添加任何想要顯示的訊息
  • 命令的描述設置,只需要在 target 後方加上註解訊息

--

--

Yii Chen

Flutter Lover || Organizer FlutterTaipei || Writer, Speaker || wanna make Flutter strong in Taiwan. https://linktr.ee/yiichenhi