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

开发 前端
本文的目的是帮助您完成向 Node.js 核心文件贡献代码的第一个提交!向 Node.js 贡献代码的方式有很多种。可以参与某个工作组(网站或者联机诊断工作组等)的工作,可以在 Nodeschools 开设课程提供 Node.js 的教学, 让那些有着同样困惑的人可以向你学习。

[[205695]]

本文的目的是帮助您完成向 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 仓库

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

  1. $ git clone git@github.com:YOUR_USER_NAME/node.git 

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

注意,你修改 Node.js 的同时,其他人也会同步修改! 因此一定要不定期接受新提交,否则你的仓库会遗漏代码。

为了保持你的 fork 是***的, 你必须设置另外一个源去拉取其他人提交的代码。 为此,在终端中运行以下命令,该命令将设置一个名为upstream的远程连接。

  1. $ git remote add upstream https://github.com/nodejs/node.git 

建立upstream之后,你可以运行下面的命令,一次获得所有来自官方 Node.js 仓库的***提交:

  1. $ git pull upstream --rebase 
  2. # it will produce an output similar to this one 
  3. remote: Counting objects: 9150, done.   
  4. remote: Compressing objects: 100% (11/11), done.   
  5. remote: Total 9150 (delta 5908), reused 5917 (delta 5908), pack-reused 3231   
  6. Receiving objects: 100% (9150/9150), 6.71 MiB | 2.06 MiB/s, done.   
  7. 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:

  1. $ ./configure 
  2. $ make -j4 

运行 make 带 -j4 参数将使编译同时运行 4 个编译作业,这样可以显著减少构建时间。

构建完成后,可以运行如下命令使用你本地构建的 Node.js了:

  1. $ ./node --version 
  2. v9.0.0-pre 

更多关于平台支持和项目构建的信息可以在这里找到:https://github.com/nodejs/node/blob/master/BUILDING.md

#4 编写测试用例,运行测试

测试文件应该使用短线串联的命名方式。

  • 测试文件名的***部分应该是以test开始。
  • 第二部分是你要测试的模块信息。
  • 第三部分通常是你要测试的方法或者事件的名字。

因此,如果您要为 HTTP 请求编写一个测试用例,可以把它命名为:test-http-posting-form-data.js。

这是从 Node.js 项目中拿到的示例,看看测试文件长啥样:

  1. /* 
  2. In the first line of the test file you should   
  3. enable strict mode, unless you test something   
  4. that needs it disabled   
  5. */ 
  6. 'use strict'
  7. /* 
  8. the common package gives you some commonly   
  9. used testing methods, like mustCall   
  10. */ 
  11. const common = require('../common'); 
  12. /* 
  13. a small description on what you are testing   
  14. */ 
  15. // This test ensures that the http-parser can handle UTF-8 characters 
  16. // in the http header. 
  17. const assert = require('assert');   
  18. const http = require('http'); 
  19. /* 
  20. the body of the actual test - tests should exit with code 0 on success   
  21. */ 
  22. const server = http.createServer(common.mustCall((req, res) => {   
  23.   res.end('ok'); 
  24. })); 
  25. server.listen(0, () => {   
  26.   http.get({ 
  27.     port: server.address().port, 
  28.     headers: { 'Test''Düsseldorf' } 
  29.   }, common.mustCall((res) => { 
  30.     assert.strictEqual(res.statusCode, 200); 
  31.     server.close(); 
  32.   })); 
  33. }); 

使用下面的命令来运行测试:

  1. $ 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 的贡献者了。 恭喜,请继续提交! 

责任编辑:庞桂玉 来源: Linux中国
相关推荐

2012-03-01 15:55:42

2024-02-01 12:12:01

2022-08-29 18:15:25

Node.js多线程模型

2011-12-23 13:58:57

node.js

2016-08-02 10:22:10

JS微软Node

2019-10-08 11:48:20

PythonGitHub程序员

2012-02-02 15:14:29

Node.js

2010-09-07 14:42:28

2021-06-22 14:53:35

零信任网络安全网络攻击

2022-04-02 06:04:03

Node.js代码缓存V8

2011-11-18 10:04:46

Citrix私有云

2022-04-06 18:46:35

云战略云计算云服务

2013-11-01 09:34:56

Node.js技术

2015-03-10 10:59:18

Node.js开发指南基础介绍

2020-02-25 12:27:59

Node.jsWeb开发前端

2020-07-15 08:06:04

Node.js框架开发

2022-01-07 08:00:00

Node.js开发Web

2021-10-21 08:00:00

开发技能技术

2010-08-30 11:28:53

DHCP工作过程

2020-05-29 15:33:28

Node.js框架JavaScript
点赞
收藏

51CTO技术栈公众号