跳到主要內容

參與貢獻

感謝您的參與!Yarn 非常重視社群專案,我們仰賴您的協助,就像您仰賴我們的協助一樣。為了讓您協助我們,我們投資於基礎架構和文件,讓參與 Yarn 貢獻變得非常容易。如果您有任何關於我們可以改進的回饋,請開啟一個議題進行討論!

開啟議題

議題必須遵循議題範本。請務必遵循所有事項,特別注意重現。如果我們無法重現您的問題,我們將無法解決它。

您如何提供協助?

  • 檢閱我們的文件!我們通常不是以英語為母語的人士,我們的文法可能有點不順。我們非常感謝任何可以讓我們的文件更易於理解的協助!

  • 在您當地的聚會中討論 Yarn!即使是我們的使用者,也不總是知道我們的一些功能。學習,然後與您自己的圈子分享您的知識!

  • 協助我們的基礎架構!總是有小改進可以做:讓測試執行得更快、統一測試名稱、改善我們的版本號碼設定方式,...。

  • 撰寫程式碼!我們有許多想要實作的功能,但實際執行時間卻很少...。您能提供的任何協助都將受到讚賞,您將會滿意地知道您的工作幫助了數百萬的開發人員!

尋找工作

在新的程式碼庫中,可能很難知道從哪裡開始。為了提供一些協助,我們嘗試使用標籤標記各種議題,以突顯我們認為不需要像其他議題一樣多背景知識的議題

  • 適合新手議題通常是範圍有限的獨立功能,很適合用來了解 Yarn 內部運作方式。

  • 徵求協助是不用太多背景知識,但影響力又比其他議題小的議題,因此沒有核心維護人員有餘力處理這些議題。

最後,歡迎隨時到我們的Discord 頻道尋求協助和指導。我們很樂意看到新血加入,也會盡力協助你讓你的第一個開源貢獻順利成功!

撰寫你的功能

我們的儲存庫設定為在其中呼叫 yarn 時,永遠都會使用 TypeScript 原始碼本身 - 你不必重新建置任何內容,你的變更就會套用在其中(我們使用 esbuild 在我們需要時自動轉譯檔案)。缺點是它比一般的 Yarn 慢,但改善的開發人員體驗非常值得。

yarn install # Will automatically pick up any changes you made to sources

測試你的程式碼

我們目前有兩個測試套件,建置於不同的目的。第一個是單元測試,可以在儲存庫中的任何位置執行下列指令來觸發

yarn test:unit

雖然透過單元測試來測試具有嚴格 JS 介面合約的各種子元件(例如可攜式 shell 函式庫或我們提供的各種 util 函式庫),但 Yarn 整體依賴整合測試。由於整合測試與使用者體驗更接近,因此當我們重構應用程式時,整合測試能讓我們更有信心,確保一切都能按照計畫進行。這些測試可以透過執行下列指令來觸發(再次重申,從儲存庫中的任何位置執行)

yarn build:cli
yarn test:integration

請注意,由於我們希望避免在每次 Yarn 呼叫中加入 esbuild 負擔,因此 CLI 需要預先建置才能執行整合測試,這就是 yarn build:cli 指令的用途。很遺憾,這表示如果你希望整合測試能採用你的變更,則每次修改後都需要重新建置 CLI。

單元測試和整合測試都使用 Jest,這表示你可以使用 -t 旗標(或僅使用檔案路徑)來篩選要執行的測試

yarn test:unit yarnpkg-shell
yarn test:integration -t 'it should correctly install a single dependency that contains no sub-dependencies'

如果你需要撰寫測試(如果你新增功能或修正錯誤,你肯定會需要),這些測試位於下列目錄中

makeTemporaryEnv 輔助程式僅為測試環境產生一個非常基本的暫時環境。第一個參數將用於產生 package.json 檔案,第二個參數將用於產生 .yarnrc.yml 檔案,第三個參數是暫時環境建立後將執行的回呼函式。

格式化你的程式碼

在提交你的程式碼進行審查之前,請務必使用下列指令從儲存庫中的任何位置適當地格式化你的程式碼

yarn test:lint

我們使用 ESLint 來檢查程式碼,因此使用 --fix 旗標將導致 ESLint 嘗試自動修正程式碼中可能遺留的大部分錯誤

yarn test:lint --fix

檢查約束

我們使用 約束 來強制執行儲存庫中的各種規則。這些約束在 constraints.pro 檔案 中宣告,而且其用途已透過註解記錄下來。

限制條件可透過 yarn constraints 進行檢查,並透過 yarn constraints --fix 進行修正。一般來說

  • 工作區不得依賴衝突範圍的依賴項。安裝依賴項時,請使用 -i,--interactive 旗標並選取「重複使用」,這樣就不必處理這項規則。

  • 工作區不得依賴非工作區範圍的可用工作區。安裝依賴項時,請使用 -i,--interactive 旗標並選取「重複使用」或「附加」,這樣就不必處理這項規則。

  • 屬於標準套件或外掛程式的工作區必須有特定的建置指令碼。不屬於標準套件或外掛程式的部分,必須使用 inline_compileconstraints.pro 檔案內宣告。

  • 工作區必須透過 repository 欄位指向我們的儲存庫。

準備要發佈的公關

為了追蹤哪些套件需要發佈,我們使用 下列文件 中所述的工作流程。總之,你必須在每個公關上執行 yarn version check --interactive,並選取哪些套件應再次發佈以使變更生效(以及發佈至哪個版本),如有任何變更的話。

你可以使用 yarn version check 檢查是否已正確設定所有內容。

如果你預期某個套件必須再次發佈,但 Yarn 沒有提供此選項,請先檢查你的本機分支名稱是否為 master。如果是這樣,Yarn 可能無法偵測你的變更(因為它會針對 master 進行偵測,而 master 就是你自己)。執行下列命令

git checkout -b my-feature
git checkout -
git reset --hard upstream/master
git checkout -
yarn version check --interactive

如果執行失敗,而且你不知道原因,請隨時 ping 維護人員,我們會盡力協助你。

注意:如果你修改其中一個 預設外掛程式,你也需要升級 @yarnpkg/cli

檢閱其他 PR

如果您發現明顯的錯誤,歡迎留言,但如果您不是成員,請勿核准 PR。在開源社群中,這通常被視為不良行為

撰寫文件

我們使用 Docusaurusmdx 來源檔案產生 HTML 頁面。

我們的網站儲存在 packages/docusaurus 目錄中。您可以透過修改 docs 資料夾中對應的 .mdx 檔案來變更頁面。例如,您會在此編輯此頁面。

然後執行以下指令以產生一個本機伺服器並查看您的變更

yarn start

當您對文件的外觀感到滿意時,只需提交您的本機變更並開啟一個 PR。Netlify 會接收您的變更並為所有人建立一個新的預覽

分析

執行以下指令以產生一個未壓縮的套件

yarn build:cli --no-minify

packages/yarnpkg-cli/bundles/yarn.js 中的已產生套件上使用分析器。以下是使用 Node.js 內建分析器的範例

YARN_IGNORE_PATH=1 node --prof packages/yarnpkg-cli/bundles/yarn.js