diff --git a/lib/internal/bootstrap/node.js b/lib/internal/bootstrap/node.js index c40d4fe09a151c..7d3d267123da95 100644 --- a/lib/internal/bootstrap/node.js +++ b/lib/internal/bootstrap/node.js @@ -40,6 +40,7 @@ const { internalBinding, NativeModule } = loaderExports; const { Object, Symbol } = primordials; const { getOptionValue } = NativeModule.require('internal/options'); const config = internalBinding('config'); +const { deprecate } = NativeModule.require('internal/util'); setupTraceCategoryState(); @@ -63,7 +64,11 @@ setupProcessObject(); hasUncaughtExceptionCaptureCallback; } -setupGlobalVariables(); +setupGlobalProxy(); +setupBuffer(); + +process.domain = null; +process._exiting = false; // Bootstrappers for all threads, including worker threads and main thread const perThreadSetup = NativeModule.require('internal/process/per_thread'); @@ -235,7 +240,6 @@ Object.defineProperty(process, 'allowedNodeEnvironmentFlags', { configurable: true }); -const { deprecate } = NativeModule.require('internal/util'); // process.assert process.assert = deprecate( perThreadSetup.assert, @@ -350,6 +354,13 @@ function setupProcessObject() { const origProcProto = Object.getPrototypeOf(process); Object.setPrototypeOf(origProcProto, EventEmitter.prototype); EventEmitter.call(process); + // Make process globally available to users by putting it on the global proxy + Object.defineProperty(global, 'process', { + value: process, + enumerable: false, + writable: true, + configurable: true + }); } function setupProcessStdio(getStdout, getStdin, getStderr) { @@ -377,29 +388,22 @@ function setupProcessStdio(getStdout, getStdin, getStderr) { }; } -function setupGlobalVariables() { +function setupGlobalProxy() { Object.defineProperty(global, Symbol.toStringTag, { value: 'global', writable: false, enumerable: false, configurable: true }); - Object.defineProperty(global, 'process', { - value: process, - enumerable: false, - writable: true, - configurable: true - }); - const util = NativeModule.require('util'); function makeGetter(name) { - return util.deprecate(function() { + return deprecate(function() { return this; }, `'${name}' is deprecated, use 'global'`, 'DEP0016'); } function makeSetter(name) { - return util.deprecate(function(value) { + return deprecate(function(value) { Object.defineProperty(this, name, { configurable: true, writable: true, @@ -421,7 +425,9 @@ function setupGlobalVariables() { set: makeSetter('root') } }); +} +function setupBuffer() { const { Buffer } = NativeModule.require('buffer'); const bufferBinding = internalBinding('buffer'); @@ -436,9 +442,6 @@ function setupGlobalVariables() { writable: true, configurable: true }); - - process.domain = null; - process._exiting = false; } function setupGlobalTimeouts() {