指南:從提問(wèn)、提 Bug 到提交高質(zhì)量 Pull Request 的完整流程)
前端GIS數(shù)據(jù)可視化【免費(fèi)下載鏈接】openlayersOpenLayers項(xiàng)目地址https://gitcode.com/gh_mirrors/op/openlayers點(diǎn)擊查看免費(fèi)下載本篇指南以倉(cāng)庫(kù)根目錄的 CONTRIBUTING.md 為骨架系統(tǒng)講解向 OpenLayers 項(xiàng)目貢獻(xiàn)代碼的完整工作流包括如何提問(wèn)、如何提交 Bug 報(bào)告、如何快速熟悉倉(cāng)庫(kù)結(jié)構(gòu)、如何提交符合規(guī)范的 Pull RequestPR以及 OpenLayers 對(duì)提交歷史、commit message 和自動(dòng)合并的硬性要求。讀完本文你將掌握一套可以直接照做的貢獻(xiàn)流程并了解背后的開發(fā)環(huán)境、代碼風(fēng)格與測(cè)試體系對(duì)應(yīng) DEVELOPING.md 與 package.json 中的實(shí)際腳本為你的第一次貢獻(xiàn)掃清障礙。貢獻(xiàn)前須知行為準(zhǔn)則與總體流程OpenLayers 是一個(gè)開放協(xié)作的地圖庫(kù)倉(cāng)庫(kù)版本見 package.json 中的version字段任何形式的貢獻(xiàn)——提問(wèn)、報(bào) Bug、提交代碼——都默認(rèn)遵循項(xiàng)目的 CODE_OF_CONDUCT.md行為準(zhǔn)則。在參與任何討論或提交內(nèi)容之前建議先閱讀該文件。完整的貢獻(xiàn)鏈路可以概括為使用或開發(fā)中遇到問(wèn)題 → 在 Stack Overflow 提問(wèn)帶openlayers標(biāo)簽確認(rèn)是缺陷 → 在 GitHub issue 跟蹤器提交 Bug 報(bào)告先搜索是否已有人報(bào)告想動(dòng)手修復(fù)或新增功能 → 先建 issue 說(shuō)明意圖等待核心開發(fā)者打上pull request accepted標(biāo)簽獲得批準(zhǔn)后 → 提交一個(gè)符合本指南全部規(guī)范的 Pull RequestCI 自動(dòng)運(yùn)行集成測(cè)試與代碼風(fēng)格檢查 → 通過(guò)后由維護(hù)者合入。Asking Questions在哪里提問(wèn)OpenLayers 明確要求關(guān)于如何使用該庫(kù)的問(wèn)題請(qǐng)到 Stack Overflow 提問(wèn)并使用openlayers標(biāo)簽。這是為了讓使用層面的問(wèn)答沉淀在可檢索的公開平臺(tái)上而不是淹沒在倉(cāng)庫(kù)的 issue 里。因此使用類問(wèn)題API 怎么用、某個(gè)功能怎么實(shí)現(xiàn)→ Stack Overflow openlayers標(biāo)簽明確的缺陷或功能建議 → GitHub issue 跟蹤器。區(qū)分這兩類問(wèn)題能顯著提高問(wèn)題被解答的效率也是貢獻(xiàn)者應(yīng)遵守的第一條潛規(guī)則。Submitting Bug Reports如何提交高質(zhì)量的 Bug 報(bào)告提交 Bug 報(bào)告的入口是項(xiàng)目的 GitHub issue 跟蹤器。在新建 issue 之前務(wù)必先做一次快速搜索確認(rèn)該問(wèn)題是否已被報(bào)告過(guò)——這既避免重復(fù)勞動(dòng)也能讓你在已有 issue 中補(bǔ)充信息。一份好的 Bug 報(bào)告應(yīng)當(dāng)盡量包含可復(fù)現(xiàn)的最小示例OpenLayers 官方提供了大量 examples 可作為復(fù)現(xiàn)基線預(yù)期行為與實(shí)際行為的差異瀏覽器、操作系統(tǒng)等環(huán)境信息。從倉(cāng)庫(kù)結(jié)構(gòu)看examples/ 目錄下存在數(shù)百個(gè).html/.js/.css配對(duì)的示例文件如 simple.html 與 simple.js這些示例本身就是復(fù)現(xiàn) Bug 的天然模板——在提交 issue 時(shí)基于某個(gè)官方示例改造出最小復(fù)現(xiàn)是維護(hù)者最歡迎的做法。Getting Familiar with the Code從 readme.md 開始熟悉倉(cāng)庫(kù)CONTRIBUTING.md 給出了一條非常實(shí)用的建議尋找readme.md文件。OpenLayers 倉(cāng)庫(kù)中多個(gè)目錄都包含說(shuō)明該目錄內(nèi)容與使用方法的readme.md它們是理解代碼組織的第一手地圖。當(dāng)前倉(cāng)庫(kù)中確認(rèn)存在以下幾份examples/readme.md說(shuō)明示例的構(gòu)建方式與 YAML front-matter 元數(shù)據(jù)layout、title、shortdesc、docs、tags、resources、experimental等字段的含義test/README.md說(shuō)明測(cè)試套件的組成與運(yùn)行方式test/node/readme.md、test/rendering/readme.md、test/typescript/readme.md分別說(shuō)明 Node 單元測(cè)試、渲染對(duì)比測(cè)試與 TypeScript 類型測(cè)試src/ol/format/readme.md說(shuō)明src/ol/format格式解析模塊的內(nèi)部約定config/jsdoc/api/readme.md與 API 文檔生成相關(guān)。按此思路新貢獻(xiàn)者在動(dòng)筆寫代碼前可以先從這些 readme 入手建立全局認(rèn)知再進(jìn)入src/ol閱讀核心實(shí)現(xiàn)。Contributing Code開發(fā)環(huán)境與代碼提交入口貢獻(xiàn)代碼的第一步是搭建開發(fā)環(huán)境詳細(xì)步驟在 DEVELOPING.md 中其要點(diǎn)包括前置要求Git以及版本 16 以上的 Node.js且git與node需在PATH中安裝依賴在倉(cāng)庫(kù)根目錄執(zhí)行npm install運(yùn)行示例執(zhí)行npm run serve-examples啟動(dòng) dev server然后在瀏覽器打開http://localhost:8080/示例 API 令牌可通過(guò)examples/.env中的*_KEY條目覆蓋參見 examples/.env.example該文件被 gitignore且不會(huì)用于網(wǎng)站構(gòu)建運(yùn)行測(cè)試執(zhí)行npm test詳見 test/README.md。從 package.json 的scripts字段可以看到測(cè)試體系的真實(shí)構(gòu)成pretest: npm run lint npm run typecheck npm run typecheck-libcheck, test-browser: vitest run --config test/browser/vitest.config.mjs, test-node: vitest run --config test/node/vitest.config.mjs, test: npm run test-browser npm run test-node npm run test-rendering -- --force也就是說(shuō)npm test會(huì)依次執(zhí)行瀏覽器測(cè)試Vitest Playwright、Node 單元測(cè)試與渲染對(duì)比測(cè)試而pretest會(huì)先運(yùn)行npm run lintESLint 代碼風(fēng)格檢查規(guī)則由 eslint.config.js 引入的eslint-config-openlayers定義以及npm run typecheckTypeScript 類型檢查。新增或修改的src/ol文件必須通過(guò)類型檢查才能合入。代碼貢獻(xiàn)統(tǒng)一通過(guò)Pull Request提交。提交前請(qǐng)確保你的 PR 符合下文的所有指南。本地構(gòu)建與鏈接ol包可選如果你的貢獻(xiàn)需要在本地的其他項(xiàng)目里即時(shí)驗(yàn)證DEVELOPING.md 提供了npm link的用法ol包從倉(cāng)庫(kù)的build/ol目錄發(fā)布先運(yùn)行npm run build-package生成構(gòu)建產(chǎn)物再在build/ol下執(zhí)行npm link最后在目標(biāo)項(xiàng)目執(zhí)行npm link ol即可解除鏈接則分別使用npm unlink --no-save ol與npm unlink。Contributor License Agreement貢獻(xiàn)的許可約定根據(jù) CONTRIBUTING.md 的說(shuō)明你的貢獻(xiàn)將按照項(xiàng)目的開源許可參見 LICENSE.md當(dāng)前為 BSD-2-Clause見 package.json 的license字段以及 GitHub 服務(wù)條款中在倉(cāng)庫(kù)許可下貢獻(xiàn)的相關(guān)約定被接受。換句話說(shuō)提交 PR 即表示你同意你的貢獻(xiàn)進(jìn)入項(xiàng)目的開源許可之下無(wú)需額外簽署紙質(zhì)協(xié)議。Pull Request GuidelinesPR 必須滿足的六項(xiàng)硬性要求CONTRIBUTING.md 規(guī)定任何 PR 都必須滿足以下要求遵循 OpenLayers 的代碼風(fēng)格詳見 DEVELOPING.md 的風(fēng)格指南部分通過(guò) CI 系統(tǒng)自動(dòng)運(yùn)行的集成測(cè)試只解決單一 issue 或新增單一功能擁有干凈的歷史小而漸進(jìn)、邏輯上相互獨(dú)立的提交且不含 merge commits使用清晰的 commit message可以被自動(dòng)合并。下面逐條展開并結(jié)合倉(cāng)庫(kù)實(shí)際給出操作要點(diǎn)。第一步先建 issue等待pull request accepted標(biāo)簽動(dòng)手寫 PR 之前先創(chuàng)建一個(gè) issue 說(shuō)明你想貢獻(xiàn)的內(nèi)容。這樣做有兩個(gè)目的確保你的 PR 不會(huì)被忽略避免貢獻(xiàn)的內(nèi)容不適合該項(xiàng)目。當(dāng)核心開發(fā)者在該 issue 上打上pull request accepted標(biāo)簽后你才可以提交 PR且PR 描述必須引用對(duì)應(yīng)的原始 issue。這個(gè)先討論、后編碼的機(jī)制從源碼層面保證了貢獻(xiàn)方向與項(xiàng)目維護(hù)者的一致——搜索倉(cāng)庫(kù)可見pull request accepted這一標(biāo)簽約定正是源自 CONTRIBUTING.md 本身。Address a single issue一個(gè) PR 只解決一件事請(qǐng)為不同的問(wèn)題分別提交 PR讓每個(gè) PR 可以獨(dú)立地被評(píng)審?;旌隙鄠€(gè)問(wèn)題的 PR 會(huì)顯著增加評(píng)審難度也更容易被駁回。Clean history干凈、原子化的提交歷史提交歷史是評(píng)審者理解你改動(dòng)脈絡(luò)的主要途徑因此要求每個(gè)提交不要超過(guò)一個(gè)新類或一個(gè)新函數(shù)的粒度不要提交改動(dòng)上千行、或包含多個(gè)互不相關(guān)邏輯變更的提交瑣碎提交例如修 lint 錯(cuò)誤的提交應(yīng)合并進(jìn)引入該錯(cuò)誤的那個(gè)提交中而不是單獨(dú)存在可以借助git apply --patch與git rebase來(lái)整理提交歷史。這一要求對(duì)應(yīng)的正是原子提交Atomic Commit約定。OpenLayers 作為長(zhǎng)期維護(hù)的大型地圖庫(kù)源碼集中在 src/ol 下數(shù)百個(gè)模塊清晰的提交歷史直接決定了git log的可讀性與后續(xù)回溯效率。Clear commit messagescommit message 的書寫規(guī)范commit message 的格式要求非常具體標(biāo)題行要短不超過(guò) 50 個(gè)字符以動(dòng)詞開頭并使用祈使語(yǔ)氣末尾不加標(biāo)點(diǎn)正文用幾行文字說(shuō)明細(xì)節(jié)可包含 issue 背景正文段落間用空行分隔每行做適當(dāng)折行列寬保持在約 74 個(gè)字符以內(nèi)這樣即使git log縮進(jìn)顯示也不會(huì)亂。標(biāo)準(zhǔn)格式示意來(lái)自 CONTRIBUTING.md 原文Header line: explaining the commit in one line Body of commit message is a few lines of text, explaining things in more detail, possibly giving some background about the issue being fixed, etc etc. The body of the commit message can be several paragraphs, and please do proper word-wrap and keep columns shorter than about 74 characters or so. That way git log will show things nicely even when its indented. Further paragraphs come after blank lines.這套規(guī)范與經(jīng)典的 Tim Pope 式提交信息風(fēng)格一致強(qiáng)調(diào)標(biāo)題說(shuō)明改了什么、正文說(shuō)明為什么改。Mergeable保證 PR 可以自動(dòng)合并由于main分支會(huì)持續(xù)被其他人的改動(dòng)推進(jìn)你的 PR 偶爾會(huì)無(wú)法自動(dòng)合并。此時(shí)需要基于更新的main分支 rebase 你的分支解決沖突使用git push --force更新你的分支使其恢復(fù)可自動(dòng)合并狀態(tài)。風(fēng)格與測(cè)試PR 通過(guò)評(píng)審的技術(shù)保障雖然 CONTRIBUTING.md 將風(fēng)格與測(cè)試的具體細(xì)節(jié)指向 DEVELOPING.md但這兩點(diǎn)是 PR 能否被接受的關(guān)鍵這里結(jié)合倉(cāng)庫(kù)實(shí)際補(bǔ)充說(shuō)明代碼風(fēng)格ESLint項(xiàng)目的 ESLint 配置位于 eslint.config.js基于eslint-config-openlayers擴(kuò)展并針對(duì)examples/*、test/**/*等目錄配置了獨(dú)立的 globals 與規(guī)則例如示例目錄允許map這類未使用變量、測(cè)試目錄預(yù)置describe/it/expect/vi等全局變量。推薦的本地工作方式是讓編輯器讀取倉(cāng)庫(kù)的 ESLint 配置在 VS Code 中安裝 ESLint 插件并在設(shè)置中加入以下 JSON實(shí)現(xiàn)保存時(shí)自動(dòng)修復(fù)風(fēng)格問(wèn)題{ editor.codeActionsOnSave: { source.fixAll: true } }PR 提交后 CI 會(huì)自動(dòng)執(zhí)行npm run lint校驗(yàn)風(fēng)格當(dāng)然你也可以在提交前先本地跑一遍提前修掉問(wèn)題。測(cè)試按 test/README.md 的說(shuō)明測(cè)試套件分三層test/browser基于 Vitest Playwright 的瀏覽器單元/集成測(cè)試npm run test-browser開發(fā)時(shí)可加--browser.headlessfalse打開真實(shí)瀏覽器調(diào)試test/node無(wú)需瀏覽器即可運(yùn)行的 Node 單元測(cè)試test/rendering將渲染結(jié)果與參考圖片逐像素對(duì)比的渲染測(cè)試npm run test-rendering。PR 必須通過(guò) CI 上的全部集成測(cè)試。新增功能通常也意味著新增對(duì)應(yīng)測(cè)試這是 OpenLayers 合并代碼的隱性前提。新增功能與示例貢獻(xiàn)的常見落地方式新增功能往往伴隨新增一個(gè)或多個(gè)示例。CONTRIBUTING.md / DEVELOPING.md 給出了示例的組織約定示例位于 examples/ 目錄新增一個(gè)示例通常需要?jiǎng)?chuàng)建兩個(gè)或三個(gè)文件——一個(gè).html文件、一個(gè).js文件以及可選的一個(gè).css文件??梢灾苯右?simple.js 和 simple.html 作為新示例的模板。按 examples/readme.md 的說(shuō)明示例的.html文件由templates目錄中的模板構(gòu)建而成并通過(guò) YAML front-matter 頭提供元數(shù)據(jù)包括layout使用的模板來(lái)自 examples/templatestitle示例標(biāo)題shortdesc示例索引頁(yè)的簡(jiǎn)短描述docs示例文檔支持 Markdowntags示例索引的標(biāo)簽resources示例所需的額外 js/css 資源YAML URL 列表experimental若為true示例頁(yè)會(huì)顯示使用了非 API 功能的警告。貢獻(xiàn)者在新增示例時(shí)按此規(guī)范填寫 front-matter即可被示例構(gòu)建與索引體系自動(dòng)收納。小結(jié)一份可復(fù)用的 OpenLayers 貢獻(xiàn)檢查清單綜合 CONTRIBUTING.md 與倉(cāng)庫(kù)實(shí)際一次合規(guī)的貢獻(xiàn)流程可以濃縮為以下檢查清單閱讀 CODE_OF_CONDUCT.md遵守社區(qū)規(guī)范使用問(wèn)題去 Stack Overflowopenlayers標(biāo)簽缺陷問(wèn)題去 issue 跟蹤器提交前先搜索先創(chuàng)建 issue 說(shuō)明意圖等待核心開發(fā)者添加pull request accepted標(biāo)簽按 DEVELOPING.md 搭建環(huán)境Node.js 16、npm install、npm run serve-examples調(diào)試示例提交 PR描述中引用原始 issue確保 PR 只解決單一問(wèn)題、提交歷史干凈原子、commit message 符合祈使語(yǔ)氣標(biāo)題 簡(jiǎn)短正文規(guī)范本地先跑npm run lint與npm test含瀏覽器、Node、渲染三層測(cè)試與類型檢查確保能通過(guò) CI若無(wú)法自動(dòng)合并基于最新mainrebase 并git push --force。按照這條路徑走完你的貢獻(xiàn)就有很大概率被 OpenLayers 核心團(tuán)隊(duì)接受并合入主分支成為這個(gè)開源地圖庫(kù)的一部分。贊分享前端GIS數(shù)據(jù)可視化【免費(fèi)下載鏈接】openlayersOpenLayers項(xiàng)目地址https://gitcode.com/gh_mirrors/op/openlayers點(diǎn)擊查看免費(fèi)下載相關(guān)推薦Apache Arrow 貢獻(xiàn)指南從提交 Bug 到合入 Pull Request 的完整流程Apache Arrow 貢獻(xiàn)指南從提交 Bug 到合入 Pull Request 的完整流程 Apache Arrow 是一個(gè)面向內(nèi)存分析的多語(yǔ)言數(shù)據(jù)處理工數(shù)據(jù)工程大數(shù)據(jù)序列化數(shù)據(jù)分析Detox 貢獻(xiàn)者指南從提交到合并的高質(zhì)量 Pull Request 全流程Detox 貢獻(xiàn)者指南從提交到合并的高質(zhì)量 Pull Request 全流程 本篇指南面向所有計(jì)劃向 Detox移動(dòng)端灰盒端到端測(cè)試框架提交代碼的開發(fā)者測(cè)試移動(dòng)開發(fā)質(zhì)量保障開發(fā)工具Faker 貢獻(xiàn)指南提交高質(zhì)量 Pull Request 的完整流程從分支同步到合并Faker 貢獻(xiàn)指南提交高質(zhì)量 Pull Request 的完整流程從分支同步到合并 Faker faker js/faker 是一個(gè)用于在瀏覽器與測(cè)試創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考