Pre-commit Hook
您可以將 Prettier 與 pre-commit 工具搭配使用。這可以在您 commit 之前,重新格式化透過 git add
標記為「已暫存」的檔案。
lint-staged
選項 1.使用案例: 當您想將其他程式碼品質工具與 Prettier(例如 ESLint、Stylelint 等)一起使用,或者您需要支援部分暫存的檔案(git add --patch
)時,這會很有用。
在繼續操作之前,請確保已安裝 Prettier 並且它位於您的 devDependencies
中。
npx mrm@2 lint-staged
這將安裝 husky 和 lint-staged,然後將一個設定新增到專案的 package.json
中,該設定將在 pre-commit hook 中自動格式化支援的檔案。
在 lint-staged 儲存庫中閱讀更多資訊。
Husky.Net
選項 2.使用案例: 一個 dotnet 解決方案,可將 Prettier 與其他程式碼品質工具(例如 dotnet-format、ESLint、Stylelint 等)一起使用。它支援多種檔案狀態(已暫存 - last-commit、git-files 等)
dotnet new tool-manifest
dotnet tool install husky
dotnet husky install
dotnet husky add pre-commit
安裝後,您可以將 prettier 工作新增到 task-runner.json
。
{
"command": "npx",
"args": ["prettier", "--ignore-unknown", "--write", "${staged}"],
"pathMode": "absolute"
}
git-format-staged
選項 3.使用案例: 非常適合用於格式化部分暫存的檔案,而其他選項不適合您的專案時。
Git-format-staged 用於執行任何可以透過 stdin 接受檔案內容的格式化工具。它的操作方式與其他格式化部分暫存檔案的工具不同:它直接將格式化工具套用於 git 物件資料庫中的物件,並將變更合併回工作樹。此程序提供了一些保證
- commit 中的變更始終會被格式化。
- 在格式化過程中,未暫存的變更絕不會在任何情況下被暫存。
- 如果已格式化、已暫存的變更與未暫存的變更之間存在衝突,則您的工作樹檔案將保持不變 - 您的工作不會被覆蓋,並且沒有任何 stash 需要清理。
- 未暫存的變更不會被格式化。
Git-format-staged 需要 Python v3 或 v2.7。Python 通常會預先安裝在 Linux 和 macOS 上,但不會預先安裝在 Windows 上。將 git-format-staged 與 husky 搭配使用
npx husky init
npm install --save-dev git-format-staged
node --eval "fs.writeFileSync('.husky/pre-commit', 'git-format-staged -f \'prettier --ignore-unknown --stdin --stdin-filepath \"{}\"\' .\n')"
yarn husky init
yarn add --dev git-format-staged
node --eval "fs.writeFileSync('.husky/pre-commit', 'git-format-staged -f \'prettier --ignore-unknown --stdin --stdin-filepath \"{}\"\' .\n')"
pnpm exec husky init
pnpm add --save-dev git-format-staged
node --eval "fs.writeFileSync('.husky/pre-commit', 'git-format-staged -f \'prettier --ignore-unknown --stdin --stdin-filepath \"{}\"\' .\n')"
bunx husky init
bun add --dev git-format-staged
bun --eval "fs.writeFileSync('.husky/pre-commit', 'git-format-staged -f \'prettier --ignore-unknown --stdin --stdin-filepath \"{}\"\' .\n')"
新增或移除檔案副檔名以 phù 合您的專案。請注意,無論您列出哪些副檔名,格式化都會遵守您專案中的任何 .prettierignore
檔案。
要瞭解 git-format-staged 的工作原理,請參閱 部分暫存檔案的自動程式碼格式化。
選項 4. Shell 腳本
或者,您可以將此腳儲存為 .git/hooks/pre-commit
並授予它執行權限
#!/bin/sh
FILES=$(git diff --cached --name-only --diff-filter=ACMR | sed 's| |\\ |g')
[ -z "$FILES" ] && exit 0
# Prettify all selected files
echo "$FILES" | xargs ./node_modules/.bin/prettier --ignore-unknown --write
# Add back the modified/prettified files to staging
echo "$FILES" | xargs git add
exit 0
如果 git 報告您的 prettified 檔案在 commit 後仍然被修改,您可能需要新增一個 post-commit 腳本來更新 git 的索引。
將類似以下內容新增到 .git/hooks/post-commit
#!/bin/sh
git update-index -g