向 Node.js 核心貢獻程式碼的六個步驟

Gergely Nemeth發表於2017-09-30

向 Node.js 核心貢獻程式碼的六個步驟

本文的目的是幫助您完成向 Node.js 核心檔案貢獻程式碼的第一個提交!

向 Node.js 貢獻程式碼的方式有很多種。可以參與某個工作組(網站或者聯機診斷工作組等)的工作,可以在 Nodeschools 開設課程提供 Node.js 的教學, 讓那些有著同樣困惑的人可以向你學習。

當然你也可以開始直接向 Node.js 的核心貢獻,比如回答使用者的問題,甚至向專案提交程式碼。

接下來,我們介紹提交程式碼以獲取樂趣和成就感的必要步驟。

# 1 Fork 專案

請訪問位於 https://github.com/nodejs/node 的 Node.js 官方倉庫,並將該專案 fork 到您的 Github 帳戶。

Contributing to the Node.js Core - Fork

#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 ,譯者:小天同學, 審校:為之漫筆

相關文章