'use strict'; const { getOptionValue } = require('internal/options'); function initializeClusterIPC() { // If this is a worker in cluster mode, start up the communication // channel. This needs to be done before any user code gets executed // (including preload modules). if (process.argv[1] && process.env.NODE_UNIQUE_ID) { const cluster = require('cluster'); cluster._setupWorker(); // Make sure it's not accidentally inherited by child processes. delete process.env.NODE_UNIQUE_ID; } } function initializePolicy() { const experimentalPolicy = getOptionValue('--experimental-policy'); if (experimentalPolicy) { process.emitWarning('Policies are experimental.', 'ExperimentalWarning'); const { pathToFileURL, URL } = require('url'); // URL here as it is slightly different parsing // no bare specifiers for now let manifestURL; if (require('path').isAbsolute(experimentalPolicy)) { manifestURL = new URL(`file:///${experimentalPolicy}`); } else { const cwdURL = pathToFileURL(process.cwd()); cwdURL.pathname += '/'; manifestURL = new URL(experimentalPolicy, cwdURL); } const fs = require('fs'); const src = fs.readFileSync(manifestURL, 'utf8'); require('internal/process/policy') .setup(src, manifestURL.href); } } function initializeESMLoader() { const experimentalModules = getOptionValue('--experimental-modules'); const experimentalVMModules = getOptionValue('--experimental-vm-modules'); if (experimentalModules || experimentalVMModules) { if (experimentalModules) { process.emitWarning( 'The ESM module loader is experimental.', 'ExperimentalWarning', undefined); } const { setImportModuleDynamicallyCallback, setInitializeImportMetaObjectCallback } = internalBinding('module_wrap'); const esm = require('internal/process/esm_loader'); // Setup per-isolate callbacks that locate data or callbacks that we keep // track of for different ESM modules. setInitializeImportMetaObjectCallback(esm.initializeImportMetaObject); setImportModuleDynamicallyCallback(esm.importModuleDynamicallyCallback); const userLoader = getOptionValue('--loader'); // If --loader is specified, create a loader with user hooks. Otherwise // create the default loader. esm.initializeLoader(process.cwd(), userLoader); } } function loadPreloadModules() { // For user code, we preload modules if `-r` is passed const preloadModules = getOptionValue('--require'); if (preloadModules) { const { _preloadModules } = require('internal/modules/cjs/loader'); _preloadModules(preloadModules); } } module.exports = { initializeClusterIPC, initializePolicy, initializeESMLoader, loadPreloadModules };