向 Node.js 核心貢獻程式碼的六個步驟
本文的目的是幫助您完成向 Node.js 核心檔案貢獻程式碼的第一個提交!
向 Node.js 貢獻程式碼的方式有很多種。可以參與某個工作組(網站或者聯機診斷工作組等)的工作,可以在 Nodeschools 開設課程提供 Node.js 的教學, 讓那些有著同樣困惑的人可以向你學習。
當然你也可以開始直接向 Node.js 的核心貢獻,比如回答使用者的問題,甚至向專案提交程式碼。
接下來,我們介紹提交程式碼以獲取樂趣和成就感的必要步驟。
# 1 Fork 專案
請訪問位於 https://github.com/nodejs/node 的 Node.js 官方倉庫,並將該專案 fork 到您的 Github 帳戶。
#2 設定 Git 倉庫
擁有了自己的倉庫,就可以直接進入終端使用如下命令克隆專案。
$ git clone git@github.com:YOUR_USER_NAME/node.git
然後用 cd node
命令進入目錄。
注意,你修改 Node.js 的同時,其他人也會同步修改! 因此一定要不定期接受新提交,否則你的倉庫會遺漏程式碼。
為了保持你的 fork 是最新的, 你必須設定另外一個源去拉取其他人提交的程式碼。 為此,在終端中執行以下命令,該命令將設定一個名為upstream
的遠端連線。
$ git remote add upstream https://github.com/nodejs/node.git
建立upstream
之後,你可以執行下面的命令,一次獲得所有來自官方 Node.js 倉庫的最新提交:
$ git pull upstream --rebase
# it will produce an output similar to this one
remote: Counting objects: 9150, done.
remote: Compressing objects: 100% (11/11), done.
remote: Total 9150 (delta 5908), reused 5917 (delta 5908), pack-reused 3231
Receiving objects: 100% (9150/9150), 6.71 MiB | 2.06 MiB/s, done.
Resolving deltas: 100% (7343/7343), completed with 3204 local objects.
#3 構建 Node.js 編譯檔案
你已經克隆了專案,是時候本地構建編譯 Node.js 檔案了!
首先要確認你已經安裝了 GCC 和 Clang(如果你是 Windows 系統可以裝 Visual Studio)環境 , 然後正確安裝 Python 2.6 或 2.7 和 GNU Make。
執行下面的命令,開始構建編譯 Node.js:
$ ./configure
$ make -j4
執行 make
帶 -j4
引數將使編譯同時執行 4 個編譯作業,這樣可以顯著減少構建時間。
構建完成後,可以執行如下命令使用你本地構建的 Node.js了:
$ ./node --version
v9.0.0-pre
更多關於平臺支援和專案構建的資訊可以在這裡找到:https://github.com/nodejs/node/blob/master/BUILDING.md
#4 編寫測試用例,執行測試
測試檔案應該使用短線串聯的命名方式。
-
測試檔名的第一部分應該是以
test
開始。 -
第二部分是你要測試的模組資訊。
-
第三部分通常是你要測試的方法或者事件的名字。
因此,如果您要為 HTTP 請求編寫一個測試用例,可以把它命名為:test-http-posting-form-data.js
。
這是從 Node.js 專案中拿到的示例,看看測試檔案長啥樣:
/*
In the first line of the test file you should
enable strict mode, unless you test something
that needs it disabled
*/
'use strict';
/*
the common package gives you some commonly
used testing methods, like mustCall
*/
const common = require('../common');
/*
a small description on what you are testing
*/
// This test ensures that the http-parser can handle UTF-8 characters
// in the http header.
const assert = require('assert');
const http = require('http');
/*
the body of the actual test - tests should exit with code 0 on success
*/
const server = http.createServer(common.mustCall((req, res) => {
res.end('ok');
}));
server.listen(0, () => {
http.get({
port: server.address().port,
headers: { 'Test': 'Düsseldorf' }
}, common.mustCall((res) => {
assert.strictEqual(res.statusCode, 200);
server.close();
}));
});
使用下面的命令來執行測試:
$ make test
測試內部模組的小竅門
要測試內部模組,必須在測試用例中依賴要測試的模組。問題是,預設情況下 Node.js 不讓你那樣做。解決的方式就是執行 Node.js 時帶上--expose-internals
引數。
編寫測試用例的更多資訊可以在這裡找到:https://github.com/nodejs/node/blob/master/doc/guides/writing-tests.md
#5 找一些有意義的事做
截至本文撰寫之時,Node.js 專案中有 563 個待解決的問題 。所以剛開始的時候,這些問題就是你要找的可以做的事情,作為新人你可以選擇一個問題來解決。
幸運的是,問題跟蹤器中有幾個標籤可以幫助找到自己中意的第一個貢獻。
第一個叫做 good first contribution,第二個是 help wanted。首先我建議從 good first contribution
開始挑選一個, 一旦你感覺對專案的工作比較熟悉之後,就可以開始從help wanted
標籤中選擇。
#6 提交解決方案
開發了新功能或擴充套件了測試覆蓋度之後,只需將更改推送到你的程式碼倉庫,然後同步到 Github上。推送,綠色合併按鈕將會出現在頂部。此時只需要新建一個 pull request,並等待其他貢獻者批准/請求你的 pull request 中的更改。
此時,你就成為一個 Node.js 的貢獻者了。 恭喜,請繼續提交!
作者:Gergely Nemeth ,譯者:小天同學, 審校:為之漫筆
相關文章
- NSA 向 Coreboot 專案貢獻程式碼boot
- 如何給 swoft 貢獻程式碼
- 制定雲戰略的六個步驟
- 終於等到你!阿里正式向 Apache Flink 貢獻 Blink 原始碼阿里Apache原始碼
- git提交程式碼的正確步驟命令 git更新提交程式碼步驟Git
- 向微軟官方貢獻 @types 包後引發的思考微軟
- github提交程式碼步驟Github
- injectionForXcode程式碼注入步驟XCode
- 過去十年間的Linux核心的貢獻對比Linux
- 幾個步驟,讓你的 iOS 程式碼容易閱讀iOS
- 聊聊原始碼貢獻這件大事原始碼
- CNCF:中國已成為全球第二大開源貢獻國 CNCF專案的程式碼貢獻接近100萬
- 戰碼先鋒直播預告丨參與文件貢獻,開啟OpenHarmony社群貢獻之旅
- 白話--長短期記憶(LSTM)的幾個步驟,附程式碼!
- 「2021」我給Vue.js生態貢獻程式碼的這一年Vue.js
- 學習原始碼的第八個月,我成了Spring的開源貢獻者原始碼Spring
- Measure階段是如何為六西格瑪專案做貢獻的?
- 舒服,給Spring貢獻一波原始碼。Spring原始碼
- 巴延興:從主導多個SIG組到OpenHarmony “程式碼貢獻之星”,我是如何做到的?
- 六西格瑪企業:從困惑到成功的11個步驟!
- AI Devin第一次成為自己程式碼庫的最大貢獻者AIdev
- 如何向開源專案做貢獻(以 incubator-dubbo 為例)BAT
- 再次貢獻我的心血(Wap Explorer)
- 抓到Dubbo非同步呼叫的小BUG,再送你一個貢獻開原始碼的機會非同步原始碼
- 使用C語言程式設計的7個步驟C語言程式設計
- 記一次對Koa.js middleware的原始碼貢獻JS原始碼
- vnc安裝步驟,4個在Linux下vnc的個安裝步驟VNCLinux
- 詳解資料處理的六步驟
- 這三個步驟幫助銀行核心系統上雲
- OpenHarmony:2023年OpenHarmony一共新增程式碼1620萬行 其中華為貢獻的程式碼佔比降至88.75%
- 【譯】Go 語言原始碼貢獻官方指導文件Go原始碼
- TDengine 上榜 BenchCouncil 全球第一個開源貢獻榜
- 10分鐘搭建你的第一個影象識別模型(附步驟、程式碼)模型
- redis在微服務領域的貢獻Redis微服務
- 用 Python 玩轉 GitHub 的貢獻板PythonGithub
- 現階段實踐“拿著錘子找釘子”的六個步驟
- Windows核心驅動學習(六)程式碼注入與核心掛鉤Windows
- 實踐心得:從讀論文到復現到為開源貢獻程式碼
- .NET 各版本貢獻者列表