我們的目標是讓 Remix 的開發穩定、可靠且開放。沒有我們優秀的使用者社群,我們無法做到這一點!
本文將使您熟悉我們的開發流程以及如何設定您的環境。
為確保您的工作有最大的機會被接受,請在貢獻任何內容之前閱讀本文!
所有發送 Pull Request 的貢獻者都需要簽署貢獻者授權協議 (CLA),該協議明確將貢獻的所有權分配給我們。
當您開始一個 pull request 時,remix-cla-bot 會提示您查看 CLA 並透過將您的姓名新增至 contributors.yml 來簽署它。
本文將貢獻者分為以下角色
如果您有新功能的想法,請不要發送 Pull Request,而是遵循此流程
如果您認為您發現了一個錯誤,我們很樂意收到修復它的 PR!請遵循以下準則
沒有測試案例的錯誤修復 PR 可能會立即關閉(有些事情很難測試,我們會在此處酌情處理)
如果您認為您發現了一個錯誤,但沒有時間發送 PR,請遵循以下指南
在 Stackblitz、Replit、CodeSandbox 等地方建立一個最小化的問題重現範例,以便我們可以瀏覽並觀察錯誤
如果這不可行(與某些主機設定等有關),請建立一個 GitHub 儲存庫,我們可以在 README 中使用明確的指示來執行它以觀察錯誤。
開啟一個 issue 並連結到重現範例。
沒有重現範例的錯誤回報將會立即關閉,並要求提供重現範例。
您隨時可以在我們的直播規劃會議中查看 Remix 的開發進度
#roadmap-livestream-chat
頻道。如果路線圖上的 Issue 預計很大(涉及多個任務、作者、PR 等),管理團隊將建立一個臨時專案看板。
#collaborators
私人頻道中,以獲得架構和實作方面的幫助。此頻道是私人的,以盡量減少干擾,以便管理員不會錯過訊息,並且負責人可以順利解決問題。負責人也可以在任何頻道或任何地方討論這些問題!每週一次,Remix 團隊和任何外部負責人都會被邀請審查路線圖
為了保持儲存庫的清潔和井然有序,協作者將採取以下行動
在您可以為程式碼庫做出貢獻之前,您需要 fork 儲存庫。這會根據您所做的貢獻類型而略有不同
以下步驟將幫助您設定好為此儲存庫貢獻變更
Fork 儲存庫(點擊 此頁面右上角的 Fork 按鈕)。
在本地複製您的 fork。
# in a terminal, cd to parent directory where you want your clone to be, then
git clone https://github.com/<your_github_username>/remix.git
cd remix
# if you are making *any* code changes, make sure to checkout the dev branch
git checkout dev
執行 pnpm
安裝依賴項。如果您使用 npm
安裝,將會產生不必要的 package-lock.json
檔案。
執行 npx playwright install
安裝 Playwright 以便能夠正確執行測試,或者使用 Visual Studio Code 外掛程式。
執行 pnpm test
以驗證您是否已為本機開發設定好所有內容。
重要:在 GitHub 中建立 PR 時,請確保將基礎設定為正確的分支。
dev
用於程式碼變更。main
:用於文件和某些範本的變更。您可以在撰寫 PR 時,使用「比較變更」標題下方的下拉式選單,在 GitHub 中設定基礎。
我們在這個專案中使用 jest
和 playwright
的組合進行測試。我們在 integration 資料夾中有一套整合測試,並且套件都有自己的 jest 設定,然後在專案根目錄中的主要 jest 設定中引用這些設定。
整合測試和主要測試可以使用 npm-run-all
並行執行,以使測試盡可能快速且有效率地執行。要獨立執行這兩組測試,您需要執行個別的腳本
pnpm test:primary
pnpm test:integration
我們也支援用於專案、檔案和測試篩選的監看外掛程式。若要篩選,您可以使用 --testNamePattern
、--testPathPattern
和 --selectProjects
的組合。例如
pnpm test:primary --selectProjects react --testPathPattern transition --testNamePattern "initial values"
我們也有這些的監看模式外掛程式。因此,您可以執行 pnpm test:primary --watch
並點擊 w
以查看可用的監看命令。
或者,您可以完全獨立地執行一個專案,方法是 cd
到該專案中並執行 pnpm jest
,這將會擷取該專案的 jest 設定。
Remix 使用單一儲存庫來託管多個套件的程式碼。這些套件位於 packages
目錄中。
我們使用 pnpm workspaces 來管理依賴項的安裝和執行各種腳本。要安裝所有內容,請從儲存庫根目錄執行 pnpm install
。
從根目錄執行 pnpm build
將會執行建置。您可以使用 pnpm watch
在監看模式下執行建置。
在為應用程式開發功能時,能夠與真實應用程式互動通常非常有用。因此,您可以將應用程式放置在 playground
目錄中,建置過程會自動將所有輸出複製到 playground
目錄中所有應用程式的 node_modules
中。它甚至會為您觸發即時重新載入事件!
若要產生新的遊樂場,只需執行
pnpm playground:new <?name>
其中遊樂場的名稱是可選的,預設為 playground-${Date.now()}
。然後您可以 cd
到為您產生的目錄中並執行 npm run dev
。在另一個終端機視窗中,讓 pnpm watch
正在執行,您就可以使用即時重新載入魔法🧙♂️來處理任何您喜歡的 Remix 功能。
從 pnpm playground:new
產生的遊樂場是基於 scripts/playground/template
中的範本。如果您想變更範本的任何內容,您可以在 scripts/playground/template.local
中建立自訂範本,該範本是 .gitignored
的,因此您可以根據自己的喜好進行自訂。
在執行測試之前,您需要執行建置。建置完成後,從根目錄執行 pnpm test
將會執行每個套件的測試。如果您想執行特定套件的測試,請使用 pnpm test:primary --selectProjects <display-name>
# Test all packages
pnpm test
# Test only @remix-run/express
pnpm test:primary --selectProjects express
此儲存庫維護用於不同目的的獨立分支。它們看起來會像這樣
- main > the most recent release and current docs
- dev > code under active development between stable releases
可能還有其他分支用於各種功能和實驗,但所有的魔法都來自這些分支。
夜間發布將從 main
分支執行 action 檔案,因為排程的工作流程將始終使用預設分支的最新 commit,由夜間 action 檔案上的此註解表示,但是它們在設定期間會檢查 dev
分支,因為那是我們希望夜間發布所依據的分支。從那裡,我們檢查 git SHA 是否相同,並且僅在發生變更時才會發布新的夜間版本。
對於 Remix 的每次發布(穩定版、實驗版、夜間版和預發布版),我們都會對來自 create-remix
的每個官方轉接器上的 Remix 應用程式進行完整的端對端測試,一直到將它們部署到生產環境。我們透過使用預設的範本和 Fly 和 Arc 的 CLI 來做到這一點。然後,我們將執行一些簡單的 Cypress 斷言,以確保開發和部署的應用程式都能正常執行。