跳到內容

貢獻指南

我們歡迎大家為 Wails 做出貢獻!無論您是修復錯誤、新增功能,還是改善文件,您的幫助都備受感激。

發現了錯誤嗎?開啟一個 issue,並包含:

  • 清晰的描述
  • 重現步驟
  • 預期行為與實際行為的對比
  • 系統資訊
  • 程式碼範例

我們始終歡迎文件方面的改善:

  • 修正錯字和錯誤
  • 新增範例
  • 釐清說明
  • 翻譯內容

透過 pull request 提交程式碼:

  • 錯誤修復
  • 新功能
  • 效能改進
  • 測試
Terminal window
# 在 GitHub 上 fork 儲存庫
# 然後複製您的 fork
git clone https://github.com/YOUR_USERNAME/wails.git
cd wails
# 新增上游遠端倉庫
git remote add upstream https://github.com/wailsapp/wails.git
Terminal window
# 安裝相依性
go mod download
# 建置 Wails CLI
cd v3/cmd/wails3
go build
# 測試您的建置
./wails3 version
Terminal window
# 執行所有測試
go test ./...
# 執行特定套件測試
go test ./v3/pkg/application
# 執行並包含覆蓋率
go test -cover ./...
Terminal window
# 更新 main
git checkout main
git pull upstream main
# 建立功能分支
git checkout -b feature/my-feature
  1. 撰寫程式碼,遵循 Go 的慣例
  2. 新增測試以涵蓋新功能
  3. 更新文件(如有需要)
  4. 執行測試以確保沒有破壞現有功能
  5. 提交變更,並附上清晰的訊息
Terminal window
# 良好的提交訊息
git commit -m "fix: resolve window focus issue on macOS"
git commit -m "feat: add support for custom window chrome"
git commit -m "docs: improve bindings documentation"
# 使用慣用提交格式 (conventional commits):
# - feat: 新功能
# - fix: 錯誤修復
# - docs: 文件
# - test: 測試
# - refactor: 程式碼重構
# - chore: 維護
Terminal window
# 推送到您的 fork
git push origin feature/my-feature
# 在 GitHub 上開啟 pull request
# 提供清晰的描述
# 關聯相關的 issues
## 描述
簡短描述所做的變更
## 變更內容
- 新增了功能 X
- 修復了錯誤 Y
- 更新了文件
## 測試
- 在 macOS 14 上測試
- 在 Windows 11 上測試
- 所有測試通過
## 相關 Issues
Fixes #123
  • 程式碼遵循 Go 慣例
  • 已新增/更新測試
  • 文件已更新
  • 所有測試通過
  • 沒有破壞性變更(或有文件說明)
  • 提交訊息清晰
// ✅ 良好:清晰、有文件說明、有測試
// ProcessData 處理輸入資料並回傳結果。
// 如果資料無效,則回傳錯誤。
func ProcessData(data string) (string, error) {
if data == "" {
return "", errors.New("data cannot be empty")
}
result := process(data)
return result, nil
}
// ❌ 不佳:無文件說明、無錯誤處理
func ProcessData(data string) string {
return process(data)
}
func TestProcessData(t *testing.T) {
tests := []struct {
name string
input string
want string
wantErr bool
}{
{"valid input", "test", "processed", false},
{"empty input", "", "", true},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
got, err := ProcessData(tt.input)
if (err != nil) != tt.wantErr {
t.Errorf("ProcessData() error = %v, wantErr %v", err, tt.wantErr)
return
}
if got != tt.want {
t.Errorf("ProcessData() = %v, want %v", got, tt.want)
}
})
}
}

文件使用 Starlight (Astro) 撰寫:

Terminal window
cd docs
npm install
npm run dev
  • 使用國際英文拼寫
  • 從問題開始說明
  • 提供可運作的範例
  • 包含疑難排解
  • 交叉引用相關內容

請保持尊重、包容且專業。我們都在這裡共同建構優秀的軟體。

貢獻者將被認可於:

  • 版本釋出筆記
  • 貢獻者名單
  • GitHub insights

感謝您為 Wails 做出的貢獻!🎉