0%

Axios源码解析(七):项目周边

上篇 Axios 源码解析(六):入口文件解析了最后一片代码:入口文件 axios.js。接下来终于接近尾声,本篇对 axios 项目相关周边 MD文件 进行了翻译。

https://github.com/MageeLin/axios-source-code-analysis 中的 analysis 分支可以看到当前已解析完的文件。

生态

🐯 这是 axios 相关库和资源的列表。

如果你想添加任何内容,请不要犹豫,直接提交 PR。

通用

记录和调试

React 和 redux

单元测试

  • axiosist - 基于 Axios 的超级测试:将 node.js 请求处理器转换为 axios 适配器,用于 node.js 服务器单元测试。
  • axios-mock-adapter — 可以轻松模拟请求的 Axios 适配器
  • moxios - 模拟 axios 请求进行测试
  • mocha-axios - 使用 Mocha 和 Axios 简化集成测试

常用功能指南书

🐯 这里有一些常用功能的指南

为了让 axios 尽可能轻量级,通常需要拒绝各种合并请求。许多功能都可以通过使用其他库扩充 axios 来支持。

Promise.prototype.done

1
$ npm install axios promise --save
1
2
3
4
5
6
7
8
9
10
const axios = require('axios');
require('promise/polyfill-done');

axios
.get('http://www.example.com/user')
.then((response) => {
console.log(response.data);
return response;
})
.done();

Promise.prototype.finally

1
$ npm install axios promise.prototype.finally --save
1
2
3
4
5
6
7
8
9
10
11
12
const axios = require('axios');
require('promise.prototype.finally').shim();

axios
.get('http://www.example.com/user')
.then((response) => {
console.log(response.data);
return response;
})
.finally(() => {
console.log('本行一直会被调用');
});

Inflate/Deflate

1
$ npm install axios pako --save
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// client.js
const axios = require('axios');
const pako = require('pako');

const user = {
firstName: 'Fred',
lastName: 'Flintstone',
};

const data = pako.deflate(JSON.stringify(user), { to: 'string' });

axios.post('http://127.0.0.1:3333/user', data).then((response) => {
response.data = JSON.parse(pako.inflate(response.data, { to: 'string' }));
console.log(response.data);
return response;
});
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
// server.js
const pako = require('pako');
const http = require('http');
const url = require('url');

const server = http.createServer((req, res) => {
req.setEncoding('utf8');

const parsed = url.parse(req.url, true);
const pathname = parsed.pathname;

if (pathname === '/user') {
let data = '';
req.on('data', (chunk) => {
data += chunk;
});

req.on('end', () => {
const user = JSON.parse(pako.inflate(data, { to: 'string' }));
console.log(user);

res.writeHead(200, {
'Content-Type': 'application/json',
});
res.end(
pako.deflate(JSON.stringify({ result: 'success' }), { to: 'string' })
);
});
} else {
res.writeHead(404);
res.end(
pako.deflate(JSON.stringify({ result: 'error' }), { to: 'string' })
);
}
});

server.listen(3333);

JSONP

1
$ npm install jsonp --save
1
2
3
4
5
6
7
8
9
const jsonp = require('jsonp');

jsonp('http://www.example.com/foo', null, (err, data) => {
if (err) {
console.error(err.message);
} else {
console.log(data);
}
});

Collaborator 行为准则

🐯 对于 Collaborator 行为提出的要求

我们的承诺

为了营造一个开放和热情的环境,作为贡献者和维护者,我们承诺:无论年龄、体型、残疾、种族、经验水平、国籍、外表、宗教或性取向如何,参与我们的项目和社区的每个人都将获得无骚扰的体验。

我们的标准

有助于创造积极环境的行为示例包括:

  • 使用欢迎和包容的语言
  • 尊重不同的观点和经验
  • 优雅地接受建设性的批评
  • 专注于对社区最有利的事情
  • 认同其他社区成员

不可接受的参与者行为示例包括:

  • 使用色情语言或图像以及不受欢迎的性暗示或性挑逗
  • 毒舌、贬损性评论以及人身攻击或政治性攻击
  • 公开或私下的骚扰
  • 未经明确许可,发布他人的个人信息,例如实际地址或电子地址
  • 其他的在专业环境中被认为不合理的行为

我们的责任

项目维护者负责阐明可接受行为的标准,并对任何不可接受行为采取恰当且公平的修正措施。

项目维护者有权利和责任删除、编辑或拒绝与本行为准则不一致的评论 (comments)、提交 (commits)、代码、wiki 编辑、问题 (issues) 和其他贡献,临时或永久禁止其他贡献者的任何不恰当、具有威胁性、冒犯性或有害的其他行为。

适用范围

当个人代表该项目或团体时,本行为准则适用于其项目平台和团体平台。代表项目或团体的情况,举例来说包括使用官方项目的电子邮件地址、通过官方的团体媒体账号发布、或线上或线下事件中担任指定代表。该项目的呈现方式可由其项目维护者进行进一步的定义及解释。

强制执行

可以通过 mzabriskie@gmail.com,来联系项目团队来报告滥用、骚扰或其他不被接受的行为。任何维护团队对认为所有的有必要且适合的投诉都将进行审核及调查,并做出对应的回应。 项目小组有对事件发起者有保密的义务。 具体执行的方针的细节可能会单独公布。

对于没有认真的遵守且执行本行为准则的项目维护人员,项目领导人或是其他成员可以临时或永久的取消其维护者身份。

来源

本行为准则改编自[Contributor Covenant]homepage],版本 1.4 ,可在此查看[http://contributor-covenant.org/version/1/4][version](http://contributor-covenant.org/version/1/4/)]

Collaborator 贡献指南

🐯 对 Collaborator 提出的指南

作为贡献者,你将参与 axios 并承担一些管理职责。本指南将帮助你了解作为贡献者的角色和责任。

  1. 遵守并协助执行行为准则。 你应当已阅读 行为准则 并同意遵守该准则。这个社区应该是友好和热情的。
  2. 将 issue 进行分类。 作为贡献者,你可以帮助整理报告的 issue。issue 有 bug、回归、功能请求、问题等各种类型。给 issue 标记适当的标签并按需回应。如果这是一个合理的请求就解决它,否则就关闭该 issue,并在评论中提供如何寻求支持的建议。如果一个 issue 已经超过一个星期不活跃(即 issue 的所有者没有回复你),关闭问题并表明过期 issue 已经关闭;如果需要可以随时重新打开。如果 issue 需要更改代码,鼓励 issue 所有者提交 PR。对于比较简单的代码更改,添加一个非常简单和详细的修改清单,贴上“仅限初学者”的标签,鼓励新手开源参与。
  3. 回答问题。 你不应该提供与项目不相关 issue 的答案(例如指导别人如何使用 JavaScript 等)。如果 issue 与项目无关,请关闭 issue。如果 issue 来源于糟糕的文档,请更新文档并添加代码示例。无论如何请尽量提供帮助,并记住没有愚蠢的问题。
  4. 协助 PR。 通过鼓励贡献者为他们自己的问题提供 PR,理想情况下,你的大部分精力应该集中在贡献者为自己的 issue 提供的 PR 上。在你查看 PR 时,请记住一些下列要点。
  • 修复 bug 时:PR 是否解决了问题,并且没有引入任何回归错误?
  • 实现一个功能时:该功能是否适合 axios 的范围?
  • 删除功能时:是否正确弃用并发出警告?
  • 在引入功能时:API 是否可预测?
  • 新代码是否适用于所有支持的平台/浏览器?
  • 是否通过 CI 进行了测试和 linting ?
  • 是否测试验证过所做的更改?
  1. 修复 bug 和实现功能。 当 bug 需要修复或功能需要实现,但等待 PR 已经来不及时,你可以自己来更改代码。你应该自己提交一个 PR 并让至少一个其他贡献者检查它。在推送代码时,请考虑第 4 点中的要点。

再次感谢你作为贡献者提供的帮助,这让 axios 社区变得更好!如果你有任何问题或需要任何帮助,请随时联系其他贡献者或作者。

社区参与贡献的指南

🐯 对社区开发这贡献代码提出的指南

我们对社区所做的任何贡献都持有开放态度并表示感谢。为 axios 做出贡献时,你应遵守 行为准则

代码样式

请遵守 node style guide.

Commit 格式

Commit 消息应该是基于动词开头的,使用以下模式:

  • Fixing ...
  • Adding ...
  • Updating ...
  • Removing ...

测试

请更新测试内容来展示你的代码更改。如果 PR 在 Travis CI 上失败了,则该 PR 不会被接受。

文档

请对应地更新 说明文档,使 API 和文档之间没有差异。

开发

  • grunt test 运行 jasmine 和 mocha 测试
  • grunt build 运行 webpack 并打包源码
  • grunt version 准备发布代码
  • grunt watch:test 观察变化并运行 test
  • grunt watch:build 监视更改并运行 build

请不要在你的 PR 中包含对 dist/ 目录的更改。该目录应该只在发布新版本时更新。

发布

发布新版本时大多数步骤是自动化的。但目前 CHANGELOG 需要手动更新。完成操作后,运行以下命令。版本应遵循 语义版本控制

  • npm version <newversion> -m "Releasing %s"
  • npm publish

运行实例

实例允许手动进行测试。

运行实例

1
2
$ npm run examples
# Open 127.0.0.1:3000

在浏览器中运行沙箱

1
2
$ npm start
# Open 127.0.0.1:3000

在终端中运行沙箱

1
2
$ npm start
$ node ./sandbox/client

完结

🎉 至此, Axios 源码解析系列文章全部完成,在解析的过程中发现的 Axios 源码的一些细节错误也提了 PR,希望对大家有所帮助!

👆 全文结束,棒槌时间到 👇