stuxt.github.io icon indicating copy to clipboard operation
stuxt.github.io copied to clipboard

[译]向Node.js核心贡献代码的六个步骤

Open stuxt opened this issue 8 years ago • 0 comments

向Node.js核心贡献代码的六个步骤

本文的目的是帮助您完成向Node.js核心文件贡献代码的第一个提交!

向Node.js贡献代码的方式有很多种。你可以向其中的某个 工作组捐献(像网站或者联机诊断工作组等),或者可以在 Nodeschools开设课程提供Node.js的教学, 所以那些有着同样困惑的人可以向你学习。

当然你也可以开始直接向Node.js的核心贡献,无论你是通过回答使用者的问题,还是向项目中提交代码。

构建Node.js核心的6个必要步骤

在接下来的章节中,您将深入了解开始提交代码获取乐趣和成就感的必要步骤。

#1 Fork 项目

准备开始,请访问位于[https://github.com/nodejs/node](https://github.com/nodejs/node)的Node.js官方仓库,并将该项目fork到您的Github 帐户。

Contributing to the Node.js Core - Fork

#2 设置你的git仓库

一旦拥有了自己的仓库,就可以直接进入终端使用如下命令克隆项目。

`$ git clone [[email protected]](https://blog.risingstack.com/cdn-cgi/l/email-protection):YOUR_USER_NAME/node.git`

然后用 cd node命令进入目录。

一定要注意,一旦你开始开发对Node.js的更改,而其他人也会同步进行开发! 您fork到你账户的仓库一定要继续不定期的接受新的提交,否则您的仓库会遗漏代码而落后。

为了保持你的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.

运行下面的命令,开始构建编译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的贡献 完成上面的操作后,你就即将成为一个Node.js的贡献者。 恭喜,保持你的提交,贡献者已经是你的称号了! 👏🎸

Follow @RisingStack

stuxt avatar Sep 22 '17 06:09 stuxt