/ nodejs

【翻译】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()替代。
  • 移除之前弃用的Buffer#write(string, encoding, offset, length)
  • 移除之前弃用的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
  • SlowBufferBuffer.allocUnsafeSlow()替代并在文档中给出弃用警告。

cluster

[Docs]

  • 弃用Worker#suicide属性并由语义更清晰的Worker#exitedAfterDisconnect替代。
  • cluster的'message'事件的回调函数现在有三个参数,第一个参数为worker
    • 之前的回调函数的参数为(message, handle),现在是(worker, message, handle)
    • Refs: 66f4586dd0, #5361

console

[Docs]

crypto

[Docs]

  • 改进C++代码中的错误信息的格式。
  • 如果node构建时没有crypto支持,require('crypto')会抛出异常。
  • 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]

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

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.)
  • 弃用fs.read()遗留的(fd, length, position, encoding, callback)调用方式。
  • fs.read()读长为0时不再抛出异常。(译者注:接收数据的buffer长度为0。)
  • fs.link{Sync}()现在按照正确的顺序检查调用参数。
  • fs.realpath{Sync}()现在内部使用uv_fs_realpath()而不是JavaScript实现.
    • cache参数不再接受对象作为缓存,并且被options参数替代。
    • Refs: b488b19eaf, #3594

globals

[Docs]

module

[Docs]

  • 现在在相对查找时优先查找当前目录。
    • 之前如果node_module目录存在会优先查找node_module目录。
    • 例如,之前如果node_modules/example存在,require('./example')会优先加载node_modules/example而不是./example.js
    • Refs: d38503ab01, #5689
  • 现在使用require()时符号链接会被保留。
  • require()的文件中的语法错误现在会打印更多信息。

net

[Docs]

  • 现在检查端口有效时更严谨。
  • net.createServer()现在当提供的options参数不是对象时会抛出异常。
    • 仍然可以只提供一个connectionListener回调函数。
    • Refs: a78b3344f8, #2904
  • V4MAPPED DNS hint不再默认设置,但ADDRCONFIG仍然会默认设置。

path

[Docs]

process

[Docs]

  • 现在使用process.EventEmitter会打印弃用警告。
  • 所有之前打印的node警告行为更加一致,现在只通过默认的处理程序发出process 'warning'事件。
    • 包括弃用警告,现在被归类为DeprecationWarning.
    • Refs: c6656db352, #4782
  • 现在如果process.nextTick()的参数不是function的话会抛出异常。

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()的选项historySize0来禁用。
  • 不建议使用下面这些不在文档中的readline函数,它们仅用于内部使用:
    • isFullWidthCodePoint(), stripVTControlCharacters(), getStringWidth(), emitKeys()
    • Refs: ca2e8b292f, #3862
  • Readline#emitKeypressEvents(stream)现在总是向提供的stream的'keypress'事件传入按键信息。

repl

[Docs]

  • 现在可以向_赋值,_通常保存REPL中最后一个表达式的结果。
    • 这样做将会打印一条警告并禁用保存最后一个表达式的结果。
    • Refs: ad8257fa5b, 5535
  • 做了一些改进减少当REPL执行失败时的错误数量。

stream

[Docs]

timers

[Docs]

tls

[Docs]

tty

[Docs]

url

[Docs]

  • 现在如果host改变,url.resolve()将清除认证信息。
    • 这是一种安全措施,以确保身份验证凭据不会泄露。
    • Refs: eb4201f07a, #1480

util

[Docs]

vm

[Docs]

zlib

[Docs]

  • zlib实例的close事件不再在同步调用中发出。
  • Gzip流的尾随垃圾不再丢弃,现在会抛出错误。
    • 注意:空字节田中不受影响,因为诸多场合已经指出这种填充是正常的,会被gzip(1)丢弃。
    • Refs: 54a5287e3e, #5883

Native Modules (Addons)

  • ABI模块由于一个模块初始化的次版本增加已经改变。
    • 这仅仅意味着原生插件需要重新编译。
    • Refs: 71470a8e45, #4771
  • NODE_MODULE_VERSION现在是48
  • 移除一些之前弃用的内部函数。

General Node

  • 内部工具不再打入node包中,减少了大约10%的体积。

--

--

  • 现在所有模块的错误消息更加一致。
    • 全部由大写字母开头,除此之外不含存在大写字母的普通单词,不含结尾标识。
    • 另外,参数名和其他代码现在总是被双引号(")包围。
    • 某些情况下,错误会提供更多信息。
    • Refs: 20285ad177, #3374, 53a95a5b12, #5616, 8bb60e3c8d, #5590, ec49fc8229, #5981

--

  • Node.js不再支持Windows Vista和之前的版本,不会在这些版本上运行。
    • 另外,安装程序在这些系统上不会安装。
    • 现在支持的windows最低版本是Windows 7和Windows Server 2008 R2。
    • Refs: 1cf26c036d, 55db19074d, #5167

--

--

  • 通过Makefile (tools/install.py)安装不再尝试改变npm的shebang中的node目标路径为本地构建的路径。
    • 保持其为#!/usr/bin/env node,即在全局查找node。
    • Refs: 8ffa20c495, #6098

Dependencies

  • 现在又支持共享的c-ares builds了。
  • 升级V8至5.0.71.32 + 浮动补丁。