From Fedora Project Wiki
Line 256: Line 256:
 
As this is a major update to a language interpreter, packagers of Node.js modules will need to test that their software remains compatible.
 
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: [https://pagure.io/releng/issues #Releng issue number] (a check of an impact with Release Engineering is needed) <!-- REQUIRED FOR SYSTEM WIDE AS WELL AS FOR SELF CONTAINED CHANGES -->
+
* Release engineering: [https://pagure.io/releng/issue/7537 #7537]  
 
<!-- Does this feature require coordination with release engineering (e.g. changes to installer image generation or update package delivery)?  Is a mass rebuild required?  include a link to the releng issue.  
 
<!-- Does this feature require coordination with release engineering (e.g. changes to installer image generation or update package delivery)?  Is a mass rebuild required?  include a link to the releng issue.  
 
The issue is required to be filed prior to feature submission, to ensure that someone is on board to do any process development work and testing, and that all changes make it into the pipeline; a bullet point in a change is not sufficient communication -->
 
The issue is required to be filed prior to feature submission, to ensure that someone is on board to do any process development work and testing, and that all changes make it into the pipeline; a bullet point in a change is not sufficient communication -->

Revision as of 08:14, 30 May 2018


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-05-30
  • Tracker bug: <will be assigned by the Wrangler>

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 than undefined or null. Previously the method would throw with any truthy value. [e65a6e81ef]
    • The assert.rejects() and assert.doesNotReject() methods have been added for working with async functions. [599337f43e]
  • Async_hooks
    • Older experimental async_hooks APIs have been removed. [1cc6b993b9]
  • Buffer
    • Uses of new Buffer() and Buffer() outside of the node_modules directory will now emit a runtime deprecation warning. [9d4ab90117]
    • Buffer.isEncoding() now returns undefined for falsy values, including an empty string. [452eed956e]
    • Buffer.fill() will throw if an attempt is made to fill with an empty Buffer. [1e802539b2]
  • Child Process
  • Console
    • The console.table() method has been added. [97ace04492]
  • Crypto
    • The crypto.createCipher() and crypto.createDecipher() methods have been deprecated. Please use crypto.createCipheriv() and crypto.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]
  • Dependencies
  • EventEmitter
    • The EventEmitter.prototype.off() method has been added as an alias for EventEmitter.prototype.removeListener(). [3bb6f07d52]
  • File System
    • The fs/promises API provides experimental promisified versions of the fs functions. [329fc78e49]
    • Invalid path errors are now thrown synchronously. [d8f73385e2]
    • The fs.readFile() method now partitions reads to avoid thread pool exhaustion. [67a4ce1c6e]
  • HTTP
    • Processing of HTTP Status codes 100, 102-199 has been improved. [baf8495078]
    • Multi-byte characters in URL paths are now forbidden. [b961d9fd83]
  • N-API
    • The n-api is no longer experimental. [cd7d7b15c1]
  • Net
    • The 'close' event will be emitted after 'end'. [9b7a6914a7]
  • Perf_hooks
    • The PerformanceObserver class is now an AsyncResource and can be monitored using async_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]
  • Process
    • Using non-string values for process.env is deprecated. [5826fe4e79]
    • The process.assert() method is deprecated. [703e37cf3f]
  • 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]
  • 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]
  • Timers
    • The enroll() and unenroll() methods have been deprecated. [68783ae0b8]
  • 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]
  • Trace Events
    • A new trace_events top-level module allows trace event categories to be enabled/disabled at runtime. [da5d818a54]
  • URL
    • The WHATWG URL API is now a global. [312414662b]
  • 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() and crypto.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 a Domain 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() and timers.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.

  • 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