【翻译】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
V4MAPPED
DNS 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