Skip to content

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

Description

@stuxt

向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

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions