【翻译】Nodejs - Breaking changes between v5 and v6
英语水平比较渣,如果有翻译不对的地方请指出,谢谢。
原文地址:Nodejs - Breaking changes between v5 and v6
译文地址:【翻译】Nodejs - Breaking changes between v5 and v6
查看之前的改动日志,请查看v4 to v5页面。
89个提交被标记为semver-major。
注意:# 与 .prototype. 同意,表示该类的实例的属性是可用的。
例如:Object#toString() 等同于 Object.prototype.toString()。
By Subsystem
buffer
[Docs]
- 弃用
new Buffer()并由一些列新增的Buffer API:Buffer.from(),Buffer.alloc(),Buffer.allocUnsafe()替代。- Refs:
85ab4a5f12,#4682
- Refs:
- 移除之前弃用的
Buffer#write(string, encoding, offset, length)Buffer#write()保留其他调用方式,如Buffer#write(string[, encoding])。- Refs:
2c55cc2d2c, #5048
- 移除之前弃用的
Buffer#{get|set}方法。Buffer#get(index)由buffer[index]替代。Buffer#set(index, value)由buffer[index] = value替代。- Refs:
101bca988c, #4594
new Buffer(length, encoding)现在会抛出异常。- 如果传入的
length参数是数字的话没有什么影响(译者注:个人认为这里应该是传入参数是string类型没有影响,推荐详细阅读PR),这个改动用来指出一种潜在的安全问题。 - Refs:
3b27dd5ce1, #4514
- 如果传入的
SlowBuffer由Buffer.allocUnsafeSlow()替代并在文档中给出弃用警告。- Refs:
3fe204c700,627524973a, #5833
- Refs:
cluster
[Docs]
- 弃用
Worker#suicide属性并由语义更清晰的Worker#exitedAfterDisconnect替代。- 功能保持不变。
- Refs:
4f619bde4c, #3743
- cluster的
'message'事件的回调函数现在有三个参数,第一个参数为worker。- 之前的回调函数的参数为
(message, handle),现在是(worker, message, handle)。 - Refs:
66f4586dd0, #5361
- 之前的回调函数的参数为
console
[Docs]
Console#timeEnd(label)现在将在完成后清除label。- 之前会将label遗留在
_times中. - Refs:
a5cce79ec3, #3562
- 之前会将label遗留在
- 如果label不存在,
Console#timeEnd(label)现在只会发出警告。- 之前会抛出错误。
- Refs:
1c84579031, #5901
crypto
[Docs]
- 改进C++代码中的错误信息的格式。
- Refs:
41feaa89e0, #3100,1d9451bb5a, #6042
- Refs:
- 如果node构建时没有crypto支持,
require('crypto')会抛出异常。require('tls')和require('https')同上。- Refs:
f429fe1b88, #5611
crypto.Certificate不再有_handle属性。- 之前需要
_handle属性的类方法现在直接调用c++ binding。 - Refs:
a37401e061, #5382
- 之前需要
crypto.pbkdf2()的digest参数现在是必传的。- 目前不使用digest参数会打印弃用的警告。
- crypto所有方法的默认编码为
utf8。- 之前默认的编码是
binary(latin1的nodejs版)。 - Refs:
b010c87164, #5522
- 之前默认的编码是
- 默认关闭FIPS兼容模式即使node是在FIPS规则下构建。
- 注意:正常发布的node不是在启用FIPS情况下构建的。
- Refs:
7c48cb5601, #5181
dgram
[Docs]
- 如果执行
Socket#send()没有发生错误,回调函数的error参数现在为null,而不是0.- 在io.js 1.0.0中
c9fd9e2之前就是这样的。 - Refs:
4bc1cccb22, #5929
- 在io.js 1.0.0中
dns
[Docs]
dns.resolve()现在支持解析纯DNS PTR记录。- 之前,调用
dns.resolve(hostname, 'PTR', cb)会调用dns.reverse(),之后不再这样。 - 现在hostname必须传入反转的 IN-ADDR 域。
- Refs:
dbdbdd4998, #4921
- 之前,调用
Before:
dns.resolve('8.8.4.4', 'PTR', (err, result) => {
if (err) {
// handle error
}
// result => ['google-public-dns-b.google.com']
});
After:
dns.resolve('4.4.8.8-in-addr.arpa', 'PTR', (err, result) => {
if (err) {
// handle error
}
// result => ['google-public-dns-b.google.com']
});
// one could also simply do
dns.reverse('8.8.4.4', (err, result) => {
if (err) {
// handle error
}
// result => ['google-public-dns-b.google.com']
});
dns.lookupService()现在将port参数强制转换为数字。- 之前,如果
port不是数字会抛出TypeError。 - 现在,如果port不在 0-65535 范围内的话会抛出
TypeError。 - Refs:
f3be421c1c, #4883
- 之前,如果
domain
[Docs]
- 如果没有domain
error事件处理程序,domains不再将上下文指派给其他错误处理程序。- 之前只有在domain的
error事件被处理的情况下才这样处理。 - Refs:
90204cc468, #4659
- 之前只有在domain的
events
[Docs]
- 内部事件处理程序的存储对象
EventEmitter#_events现在继承自Object.create(null)而不是Object.prototype。- 这样避免了使用原本保留的属性名时的问题,例如:
__proto__。 - 这也意味着,模块有意添加在
Object.prototype上的所有属性在_events中都不可用。 - Refs:
e38bade828, #6092
- 这样避免了使用原本保留的属性名时的问题,例如:
freelist
- 移除弃用的
freelist模块。- 这个模块主要用于内部使用,我们没有维护它的打算。
- 如有需要使用他人的模块会更合适。
- Refs:
b70dc67828, #3738
fs
[Docs]
fs.readdir{Sync}()现在默认返回utf8编码的文件名。- 文件名的编码现在通过一个选项来配置。
- Example:
fs.readdir(path, { encoding: 'hex' }, callback) - Refs:
060e5f0c00, #5616
- 弃用重新评估用户代码中的
fs源码。(译者注:这句不知道怎么翻译才好。原文:Deprecated re-evaluating the fs source code from user code.)- Refs:
1d79787e2e, #5102
- Refs:
- 弃用
fs.read()遗留的(fd, length, position, encoding, callback)调用方式。- Refs:
1124de2d76, #4525
- Refs:
fs.read()读长为0时不再抛出异常。(译者注:接收数据的buffer长度为0。)- Refs:
2b15e68bbe, #4518
- Refs:
fs.link{Sync}()现在按照正确的顺序检查调用参数。- Refs:
8b97249893, #3917
- Refs:
fs.realpath{Sync}()现在内部使用uv_fs_realpath()而不是JavaScript实现.cache参数不再接受对象作为缓存,并且被options参数替代。- Refs:
b488b19eaf, #3594
globals
[Docs]
- 弃用
global的别名root和GLOBAL。- Refs:
4e46931406, #1838
- Refs:
module
[Docs]
- 现在在相对查找时优先查找当前目录。
- 之前如果
node_module目录存在会优先查找node_module目录。 - 例如,之前如果
node_modules/example存在,require('./example')会优先加载node_modules/example而不是./example.js。 - Refs:
d38503ab01, #5689
- 之前如果
- 现在使用
require()时符号链接会被保留。- Refs:
de1dc0ae2e, #5950.
- Refs:
require()的文件中的语法错误现在会打印更多信息。- Refs:
18490d3d5a, #4287
- Refs:
net
[Docs]
- 现在检查端口有效时更严谨。
- 现在保证像
true和[1]等值不被视为有效的端口。 - Refs:
d0edabecbf, #5733,02ac302b6d, #5732
- 现在保证像
net.createServer()现在当提供的options参数不是对象时会抛出异常。- 仍然可以只提供一个connectionListener回调函数。
- Refs:
a78b3344f8, #2904
V4MAPPEDDNS hint不再默认设置,但ADDRCONFIG仍然会默认设置。- 如果你的平台需要设置hints,可以使用
Socket#connect()中新的选项hints。 - Refs:
b85a50b6da, #6021
- 如果你的平台需要设置hints,可以使用
path
[Docs]
- 如果提供的输入不是string类型的话,所有path模块的方法都会抛出异常。
- Refs:
08085c49b6, #5348
- Refs:
- 现在
path.format()在不同平台更一致且更实用。- Refs:
d1000b4137, #2408
- Refs:
process
[Docs]
- 现在使用
process.EventEmitter会打印弃用警告。- 该方法已经在源码中弃用很长时间。
- Refs:
25751bedfe, #5049
- 所有之前打印的node警告行为更加一致,现在只通过默认的处理程序发出process
'warning'事件。- 包括弃用警告,现在被归类为
DeprecationWarning. - Refs:
c6656db352, #4782
- 包括弃用警告,现在被归类为
- 现在如果
process.nextTick()的参数不是function的话会抛出异常。- Refs:
72e3dd9f43, #3860
- Refs:
querystring
[Docs]
querystring.parse()返回的解析后的对象现在继承自Object.create(null)而不是Object.prototype。- 这样避免了使用原本保留的属性名时的问题,例如:
__proto__。 - 这也意味着,模块有意添加在
Object.prototype上的所有属性在返回的对象中都不可用。 - Refs:
dba245f796, #6055
- 这样避免了使用原本保留的属性名时的问题,例如:
querystring.escape()现在对于对象使用Object#toString()而不是Object#valueOf()。- 这样使得它与
encodeURIComponent()的功能更加一致。 5dafb435d8, #5341
- 这样使得它与
readline
[Docs]
- Readline的历史现在可以通过设置
createInterface()的选项historySize为0来禁用。- 之前将之设置为
0会使用默认的30行。 - Refs:
0303a2552e, #6352
- 之前将之设置为
- 不建议使用下面这些不在文档中的readline函数,它们仅用于内部使用:
isFullWidthCodePoint(),stripVTControlCharacters(),getStringWidth(),emitKeys()- Refs:
ca2e8b292f, #3862
Readline#emitKeypressEvents(stream)现在总是向提供的stream的'keypress'事件传入按键信息。- Refs:
0a62f929da, #6024
- Refs:
repl
[Docs]
- 现在可以向
_赋值,_通常保存REPL中最后一个表达式的结果。- 这样做将会打印一条警告并禁用保存最后一个表达式的结果。
- Refs:
ad8257fa5b, 5535
- 做了一些改进减少当REPL执行失败时的错误数量。
- Refs:
3ee68f794f, 6328
- Refs:
stream
[Docs]
- 在使用object mode时写入一个
null块现在是无效的,将会抛出TypeError。- Refs:
e7c077c610, #6170
- Refs:
timers
[Docs]
- 如果没有向提供
set{Timeout|Interval|Immediate}()函数将会立刻抛出异常。- 这些方法之前也会抛出异常,但是是在时间到时抛出。
- Refs:
ac153bd2a6, #4362
tls
[Docs]
tls.Server的'clientError'修改为'tlsClientError'。- 因为T
http现在有'clientError'。 - Refs:
1ab6b21360, #4557
- 因为T
tls.createServer()'ssessionIdContext现在默认使用sha1代替md5进行hash.- 仅适用于
sessionIdContext没有手动设置并且requestCert设置为true。 - Refs:
df268f97bc, #3866
- 仅适用于
- 在文档中弃用
tls.createSecurePair()并使用TLSSocket替代。- Refs:
31de5cc436, #6063
- Refs:
tty
[Docs]
- 移除之前弃用的全局方法
tty.setRawMode()。- 使用tty instance method替代。
- Refs:
a2c0aa84e0, #2528
url
[Docs]
- 现在如果host改变,
url.resolve()将清除认证信息。- 这是一种安全措施,以确保身份验证凭据不会泄露。
- Refs:
eb4201f07a, #1480
util
[Docs]
- Error子类现在被格式化为
[MyError: message]而不是MyError {}。- Refs:
e2f47f5698, #4582
- Refs:
Date现在总是使用Date#toISOString()来格式化。- Refs:
93d6b5fb68, #4318
- Refs:
util.inspect()现在使用c++ bindings检测。- Refs:
24012a879d, #4098
- Refs:
- 移除之前弃用的
util.pump(),请使用ReadableStream#pipe()替代。- Refs:
007cfea308, #2531
- Refs:
- 移除之前弃用的
util.exec(),请使用child_process.exec()替代。- Refs:
4cf19ad1bb, #2530
- Refs:
- TypedArrays格式化现在与普通数组一样。
- 同样适用于ArrayBuffer和DataView。
- Refs:
34a35919e1, #3793
- 弃用
util._extend()并由Object.assign()替代。- Refs:
d8290286b3, #4903
- Refs:
util.log()在文档中给出弃用警告。- Refs:
236b7e8dd1, #6161
- Refs:
vm
[Docs]
vm.Script的displayErrors选项现在错误堆栈附加导致错误的代码行。- Refs:
57003520f8, #4874
- Refs:
zlib
[Docs]
- zlib实例的
close事件不再在同步调用中发出。- 只会影响所有的
*Sync()方法。 - Refs:
8b43d3f52d, #5707
- 只会影响所有的
- Gzip流的尾随垃圾不再丢弃,现在会抛出错误。
- 注意:空字节田中不受影响,因为诸多场合已经指出这种填充是正常的,会被
gzip(1)丢弃。 - Refs:
54a5287e3e, #5883
- 注意:空字节田中不受影响,因为诸多场合已经指出这种填充是正常的,会被
Native Modules (Addons)
- ABI模块由于一个模块初始化的次版本增加已经改变。
- 这仅仅意味着原生插件需要重新编译。
- Refs:
71470a8e45, #4771
NODE_MODULE_VERSION现在是48。- 移除一些之前弃用的内部函数。
- Refs:
757fbac64b, #6053
- Refs:
General Node
- 内部工具不再打入node包中,减少了大约10%的体积。
- Refs:
90a5fc20be, #5695
- Refs:
–
- 现在打印的所有警告以
(node:pid)开头。- Refs:
d01eb6882f, #3878,94b9948d63, #3833
- Refs:
–
- 现在所有模块的错误消息更加一致。
- 全部由大写字母开头,除此之外不含存在大写字母的普通单词,不含结尾标识。
- 另外,参数名和其他代码现在总是被双引号(
")包围。 - 某些情况下,错误会提供更多信息。
- Refs:
20285ad177, #3374,53a95a5b12, #5616,8bb60e3c8d, #5590,ec49fc8229, #5981
–
- Node.js不再支持Windows Vista和之前的版本,不会在这些版本上运行。
- 另外,安装程序在这些系统上不会安装。
- 现在支持的windows最低版本是Windows 7和Windows Server 2008 R2。
- Refs:
1cf26c036d,55db19074d, #5167
–
- Node.js不再支持OS X 10.7一下版本。
- Refs:
204f3a8a0b, #6402
- Refs:
–
- 通过
Makefile(tools/install.py)安装不再尝试改变npm的shebang中的node目标路径为本地构建的路径。- 保持其为
#!/usr/bin/env node,即在全局查找node。 - Refs:
8ffa20c495, #6098
- 保持其为
Dependencies
- 现在又支持共享的c-ares builds了。
- Refs:
2253be95d0, #5775
- Refs:
- 升级V8至5.0.71.32 + 浮动补丁。
- Refs: deps/v8