Node.js 10.x as default Node.js interpreter
Summary
A major upgrade to the newest LTS release of Node.js for Fedora 29.
Owner
- Name: Stephen Gallagher
- SIG: Node.js SIG
- Email: sgallagh@redhat.com and nodejs@lists.fedoraproject.org
- Release notes owner:
Current status
- Targeted release: Fedora 29
- Last updated: 2018-06-18
- Tracker bug: #1592200
- Release Notes tracking: #181
Detailed Description
Node.js releases a new LTS version each year and will support it for around 18 months, which makes it the ideal candidate for use with Fedora. Node.js 10.x was released recently and is already available as a module for Fedora 28 and Fedora 29. This Change proposal is to make 10.x the default version shipped with Fedora 29.
Benefit to Fedora
From the announcement blog post:
Node.js 10.0.0 is the seventh major Node.js release since the launch of the Node.js Foundation. In October of 2018, it will become the next [https://github.com/nodejs/release/ Active Long Term Support] branch.
Partially in celebration of the N-API native addon API graduating from experimental status, this Node.js release also comes with a coordinated experimental release of Node-ChakraCore that has full support for N-API and advances the Time-Travel innovation with easier getting started using a VSCode extension.
Feature Highlights for the Node-ChakraCore release include:
- Full support for N-API
- Easy getting started with Time-Travel Debugging via a new Visual Studio Code Extension
- TTD support for generators and async functions
- Support for Inspector protocol
- Increased stability and other assorted improvements
The full set of changes for the Node.js 10.0.0 release are detailed below.
Notable Changes
- The N-API native addons API has graduated from experimental status.
- Assert
- Calling
assert.fail()
with more than one argument is deprecated. [70dcacd710
] - Calling
assert.ok()
with no arguments will now throw. [3cd7977a42
] - Calling
assert.ifError()
will now throw with any argument other thanundefined
ornull
. Previously the method would throw with any truthy value. [e65a6e81ef
] - The
assert.rejects()
andassert.doesNotReject()
methods have been added for working with async functions. [599337f43e
]
- Calling
- Async_hooks
- Older experimental async_hooks APIs have been removed. [
1cc6b993b9
]
- Older experimental async_hooks APIs have been removed. [
- Buffer
- Uses of
new Buffer()
andBuffer()
outside of thenode_modules
directory will now emit a runtime deprecation warning. [9d4ab90117
] Buffer.isEncoding()
now returnsundefined
for falsy values, including an empty string. [452eed956e
]Buffer.fill()
will throw if an attempt is made to fill with an emptyBuffer
. [1e802539b2
]
- Uses of
- Child Process
- Undefined properties of env are ignored. [
38ee25e2e2
], [85739b6c5b
]
- Undefined properties of env are ignored. [
- Console
- The
console.table()
method has been added. [97ace04492
]
- The
- Crypto
- The
crypto.createCipher()
andcrypto.createDecipher()
methods have been deprecated. Please usecrypto.createCipheriv()
andcrypto.createDecipheriv()
instead. [81f88e30dd
] - The
decipher.finaltol()
method has been deprecated. [19f3927d92
] - The
crypto.DEFAULT_ENCODING
property has been deprecated. [6035beea93
] - The
ECDH.convertKey()
method has been added. [f2e02883e7
] - The
crypto.fips
property has been deprecated. [6e7992e8b8
]
- The
- Dependencies
- V8 has been updated to 6.6. [
9daebb48d6
] - OpenSSL has been updated to 1.1.0h. [
66cb29e646
]
- V8 has been updated to 6.6. [
- EventEmitter
- The
EventEmitter.prototype.off()
method has been added as an alias forEventEmitter.prototype.removeListener()
. [3bb6f07d52
]
- The
- File System
- The
fs/promises
API provides experimental promisified versions of thefs
functions. [329fc78e49
] - Invalid path errors are now thrown synchronously. [
d8f73385e2
] - The
fs.readFile()
method now partitions reads to avoid thread pool exhaustion. [67a4ce1c6e
]
- The
- HTTP
- Processing of HTTP Status codes
100
,102-199
has been improved. [baf8495078
] - Multi-byte characters in URL paths are now forbidden. [
b961d9fd83
]
- Processing of HTTP Status codes
- N-API
- The n-api is no longer experimental. [
cd7d7b15c1
]
- The n-api is no longer experimental. [
- Net
- The
'close'
event will be emitted after'end'
. [9b7a6914a7
]
- The
- Perf_hooks
- The
PerformanceObserver
class is now anAsyncResource
and can be monitored usingasync_hooks
. [009e41826f
] - Trace events are now emitted for performance events. [
9e509b622b
] - The
performance
API has been simplified. [2ec6995555
] - Performance milestone marks will be emitted as trace events. [
96cb4fb795
]
- The
- Process
- Using non-string values for
process.env
is deprecated. [5826fe4e79
] - The
process.assert()
method is deprecated. [703e37cf3f
]
- Using non-string values for
- REPL
- REPL now experimentally supports top-level await when using the
--experimental-repl-await
flag. [eeab7bc068
] - The previously deprecated "magic mode" has been removed. [
4893f70d12
] - The previously deprecated
NODE_REPL_HISTORY_FILE
environment variable has been removed. [60c9ad7979
] - Proxy objects are shown as Proxy objects when inspected. [
90a43906ab
]
- REPL now experimentally supports top-level await when using the
- Streams
- The
'readable'
event is now always deferred with nextTick. [1e0f3315c7
] - A new
pipeline()
method has been provided for building end-to-data stream pipelines. [a5cf3feaf1
] - Experimental support for async for-await has been added to
stream.Readable
. [61b4d60c5d
]
- The
- Timers
- The
enroll()
andunenroll()
methods have been deprecated. [68783ae0b8
]
- The
- TLS
- The
tls.convertNPNProtocols()
method has been deprecated. [9204a0db6e
] - Support for NPN (next protocol negotiation) has been dropped. [
5bfbe5ceae
] - The
ecdhCurve
default is now'auto'
. [af78840b19
]
- The
- Trace Events
- A new
trace_events
top-level module allows trace event categories to be enabled/disabled at runtime. [da5d818a54
]
- A new
- URL
- The WHATWG URL API is now a global. [
312414662b
]
- The WHATWG URL API is now a global. [
- Util
util.types.is[…]
type checks have been added. [b20af8088a
]- Support for bigint formatting has been added to
util.inspect()
. [39dc947409
]
Deprecations:
The following APIs have been deprecated in Node.js 10.0.0
- Passing more than one argument to
assert.fail()
will emit a runtime deprecation warning. [70dcacd710
] - Previously deprecated legacy async_hooks APIs have reached end-of-life and have been removed. [
1cc6b993b9
] - Using
require()
to access several of Node.js' own internal dependencies will emit a runtime deprecation. [0e10717e43
] - The
crypto.createCipher()
andcrypto.createDecipher()
methods have been deprecated in documentation.[81f88e30dd
] - Using the
Decipher.finaltol()
method will emit a runtime deprecation warning. [19f3927d92
] - Using the
crypto.DEFAULT_ENCODING
property will emit a runtime deprecation warning. [6035beea93
] - Use by native addons of the
MakeCallback()
variant that passes aDomain
will emit a runtime deprecation warning. [14bc3e22f3
], [efb32592e1
] - Previously deprecated internal getters/setters on
net.Server
has reached end-of-life and have been removed. [3701b02309
] - Use of non-string values for
process.env
has been deprecated in documentation. [5826fe4e79
] - Use of
process.assert()
will emit a runtime deprecation warning. [703e37cf3f
] - Previously deprecated
NODE_REPL_HISTORY_FILE
environment variable has reached end-of-life and has been removed. [60c9ad7979
] - Use of the
timers.enroll()
andtimers.unenroll()
methods will emit a runtime deprecation warning. [68783ae0b8
] - Use of the
tls.convertNPNProtocols()
method will emit a runtime deprecation warning. Support for NPN has been removed from Node.js. [9204a0db6e
] - The
crypto.fips
property has been deprecated in documentation. [6e7992e8b8
]
Scope
- Proposal owners:
Node.js SIG will need to upgrade the nodejs
package in Fedora 29 to 10.x (the same package as is available in modules for F28)
Node.js SIG will need to update any nodejs-*
packages in Fedora 29 if they require changes to run on Node.js 10.x, or else retire those that no longer function.
- Other developers:
As this is a major update to a language interpreter, packagers of Node.js modules will need to test that their software remains compatible.
- Release engineering: #7537
The upgrade *may* require a side-tag while updating the nodejs-*
packages. This is not yet certain.
- List of deliverables: N/A. Does not ship on default media.
- Policies and guidelines: No changes expected
- Trademark approval: N/A (not needed for this Change)
Upgrade/compatibility impact
Users who are running applications that are incompatible with Node.js 10.x will be required to expressly enable the Node.js module that matches their requirements prior to upgrade, or they may not function properly on Fedora 29. Release notes will need to be provided for this.
How To Test
Most testing should be handled by the package build process. We may attempt a mini-mass-rebuild of Node.js packages if no standard mass-rebuild occurs. Other testing should include trying out Node.js applications such as less-css
and ensuring they continue to function.
User Experience
Dependencies
All packages named nodejs-*
are dependent upon this interpreter and must be managed as part of this Change.
Contingency Plan
- Contingency mechanism: (What to do? Who will do it?)
If all RPM packages cannot be made to use Node.js 10.x in time for release, we will add a module defaults entry setting the default interpreter back to 8.x as shipped in Fedora 28. This may require epoch-bumping some nodejs-*
packages back to their Fedora 28 versions.
- Contingency deadline: Beta Freeze
- Blocks release? No
- Blocks product? No
Documentation
Upstream documentation should be sufficient. It is very comprehensive.
Release Notes
- Release Notes tracking: #181