src: rename --loader to --experimental-loader

Renames the `--loader` cli argument to `--experimental-loader`.  This is
to clearly indicate the esm loader feature as experimental even after
esm is no longer experimental.

Also minorly alters the `--experimental-loader` docs to say that the
passed loader can be an esm module.

Refs: https://github.com/nodejs/modules/issues/351#issuecomment-535189524

PR-URL: https://github.com/nodejs/node/pull/29752
Reviewed-By: Guy Bedford <guybedford@gmail.com>
Reviewed-By: Anna Henningsen <anna@addaleax.net>
Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
Reviewed-By: David Carlier <devnexen@gmail.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
This commit is contained in:
Alex Aubuchon 2019-09-28 12:51:15 -04:00 committed by Rich Trott
parent 1c5a3f0d09
commit 15fb02a515
17 changed files with 32 additions and 28 deletions

View File

@ -368,12 +368,13 @@ Specify ways of the inspector web socket url exposure.
By default inspector websocket url is available in stderr and under `/json/list` By default inspector websocket url is available in stderr and under `/json/list`
endpoint on `http://host:port/json/list`. endpoint on `http://host:port/json/list`.
### `--loader=file` ### `--experimental-loader=module`
<!-- YAML <!-- YAML
added: v9.0.0 added: v9.0.0
--> -->
Specify the `file` of the custom [experimental ECMAScript Module][] loader. Specify the `module` of a custom [experimental ECMAScript Module][] loader.
`module` may be either a path to a file, or an ECMAScript Module name.
### `--max-http-header-size=size` ### `--max-http-header-size=size`
<!-- YAML <!-- YAML
@ -981,6 +982,7 @@ Node.js options that are allowed are:
* `--enable-fips` * `--enable-fips`
* `--es-module-specifier-resolution` * `--es-module-specifier-resolution`
* `--experimental-exports` * `--experimental-exports`
* `--experimental-loader`
* `--experimental-modules` * `--experimental-modules`
* `--experimental-policy` * `--experimental-policy`
* `--experimental-repl-await` * `--experimental-repl-await`
@ -998,7 +1000,6 @@ Node.js options that are allowed are:
* `--inspect-port`, `--debug-port` * `--inspect-port`, `--debug-port`
* `--inspect-publish-uid` * `--inspect-publish-uid`
* `--inspect` * `--inspect`
* `--loader`
* `--max-http-header-size` * `--max-http-header-size`
* `--napi-modules` * `--napi-modules`
* `--no-deprecation` * `--no-deprecation`

View File

@ -632,7 +632,7 @@ would provide the exports interface for the instantiation of `module.wasm`.
<!-- type=misc --> <!-- type=misc -->
To customize the default module resolution, loader hooks can optionally be To customize the default module resolution, loader hooks can optionally be
provided via a `--loader ./loader-name.mjs` argument to Node.js. provided via a `--experimental-loader ./loader-name.mjs` argument to Node.js.
When hooks are used they only apply to ES module loading and not to any When hooks are used they only apply to ES module loading and not to any
CommonJS modules loaded. CommonJS modules loaded.
@ -731,7 +731,7 @@ export async function resolve(specifier,
With this loader, running: With this loader, running:
```console ```console
NODE_OPTIONS='--experimental-modules --loader ./custom-loader.mjs' node x.js NODE_OPTIONS='--experimental-modules --experimental-loader ./custom-loader.mjs' node x.js
``` ```
would load the module `x.js` as an ES module with relative resolution support would load the module `x.js` as an ES module with relative resolution support

View File

@ -191,9 +191,9 @@ Default is
V8 Inspector integration allows attaching Chrome DevTools and IDEs to Node.js instances for debugging and profiling. V8 Inspector integration allows attaching Chrome DevTools and IDEs to Node.js instances for debugging and profiling.
It uses the Chrome DevTools Protocol. It uses the Chrome DevTools Protocol.
. .
.It Fl -loader Ns = Ns Ar file .It Fl -experimental-loader Ns = Ns Ar module
Specify the Specify the
.Ar file .Ar module
as a custom loader, to load as a custom loader, to load
.Fl -experimental-modules . .Fl -experimental-modules .
. .

View File

@ -400,12 +400,12 @@ function initializeESMLoader() {
// track of for different ESM modules. // track of for different ESM modules.
setInitializeImportMetaObjectCallback(esm.initializeImportMetaObject); setInitializeImportMetaObjectCallback(esm.initializeImportMetaObject);
setImportModuleDynamicallyCallback(esm.importModuleDynamicallyCallback); setImportModuleDynamicallyCallback(esm.importModuleDynamicallyCallback);
const userLoader = getOptionValue('--loader'); const userLoader = getOptionValue('--experimental-loader');
// If --loader is specified, create a loader with user hooks. Otherwise // If --experimental-loader is specified, create a loader with user hooks.
// create the default loader. // Otherwise create the default loader.
if (userLoader) { if (userLoader) {
const { emitExperimentalWarning } = require('internal/util'); const { emitExperimentalWarning } = require('internal/util');
emitExperimentalWarning('--loader'); emitExperimentalWarning('--experimental-loader');
} }
esm.initializeLoader(process.cwd(), userLoader); esm.initializeLoader(process.cwd(), userLoader);
} }

View File

@ -114,7 +114,8 @@ void PerIsolateOptions::CheckOptions(std::vector<std::string>* errors) {
void EnvironmentOptions::CheckOptions(std::vector<std::string>* errors) { void EnvironmentOptions::CheckOptions(std::vector<std::string>* errors) {
if (!userland_loader.empty() && !experimental_modules) { if (!userland_loader.empty() && !experimental_modules) {
errors->push_back("--loader requires --experimental-modules be enabled"); errors->push_back("--experimental-loader requires "
"--experimental-modules be enabled");
} }
if (has_policy_integrity_string && experimental_policy.empty()) { if (has_policy_integrity_string && experimental_policy.empty()) {
errors->push_back("--policy-integrity requires " errors->push_back("--policy-integrity requires "
@ -311,6 +312,12 @@ EnvironmentOptionsParser::EnvironmentOptionsParser() {
"experimental support for exports in package.json", "experimental support for exports in package.json",
&EnvironmentOptions::experimental_exports, &EnvironmentOptions::experimental_exports,
kAllowedInEnvironment); kAllowedInEnvironment);
AddOption("--experimental-loader",
"(with --experimental-modules) use the specified file as a "
"custom loader",
&EnvironmentOptions::userland_loader,
kAllowedInEnvironment);
AddAlias("--loader", "--experimental-loader");
AddOption("--experimental-modules", AddOption("--experimental-modules",
"experimental ES Module support and caching modules", "experimental ES Module support and caching modules",
&EnvironmentOptions::experimental_modules, &EnvironmentOptions::experimental_modules,
@ -363,11 +370,6 @@ EnvironmentOptionsParser::EnvironmentOptionsParser() {
"set module type for string input", "set module type for string input",
&EnvironmentOptions::module_type, &EnvironmentOptions::module_type,
kAllowedInEnvironment); kAllowedInEnvironment);
AddOption("--loader",
"(with --experimental-modules) use the specified file as a "
"custom loader",
&EnvironmentOptions::userland_loader,
kAllowedInEnvironment);
AddOption("--es-module-specifier-resolution", AddOption("--es-module-specifier-resolution",
"Select extension resolution algorithm for es modules; " "Select extension resolution algorithm for es modules; "
"either 'explicit' (default) or 'node'", "either 'explicit' (default) or 'node'",

View File

@ -1,4 +1,4 @@
// Flags: --experimental-modules --loader ./test/fixtures/es-module-loaders/example-loader.mjs // Flags: --experimental-modules --experimental-loader ./test/fixtures/es-module-loaders/example-loader.mjs
/* eslint-disable node-core/require-common-first, node-core/required-modules */ /* eslint-disable node-core/require-common-first, node-core/required-modules */
import assert from 'assert'; import assert from 'assert';
import ok from '../fixtures/es-modules/test-esm-ok.mjs'; import ok from '../fixtures/es-modules/test-esm-ok.mjs';

View File

@ -1,4 +1,4 @@
// Flags: --experimental-modules --loader ./test/fixtures/es-module-loaders/loader-with-dep.mjs // Flags: --experimental-modules --experimental-loader ./test/fixtures/es-module-loaders/loader-with-dep.mjs
/* eslint-disable node-core/require-common-first, node-core/required-modules */ /* eslint-disable node-core/require-common-first, node-core/required-modules */
import '../fixtures/es-modules/test-esm-ok.mjs'; import '../fixtures/es-modules/test-esm-ok.mjs';

View File

@ -1,4 +1,4 @@
// Flags: --experimental-modules --loader ./test/fixtures/es-module-loaders/loader-invalid-format.mjs // Flags: --experimental-modules --experimental-loader ./test/fixtures/es-module-loaders/loader-invalid-format.mjs
import { expectsError, mustCall } from '../common/index.mjs'; import { expectsError, mustCall } from '../common/index.mjs';
import assert from 'assert'; import assert from 'assert';

View File

@ -1,4 +1,4 @@
// Flags: --experimental-modules --loader ./test/fixtures/es-module-loaders/loader-invalid-url.mjs // Flags: --experimental-modules --experimental-loader ./test/fixtures/es-module-loaders/loader-invalid-url.mjs
import { expectsError, mustCall } from '../common/index.mjs'; import { expectsError, mustCall } from '../common/index.mjs';
import assert from 'assert'; import assert from 'assert';

View File

@ -1,4 +1,4 @@
// Flags: --experimental-modules --loader ./test/fixtures/es-module-loaders/missing-dynamic-instantiate-hook.mjs // Flags: --experimental-modules --experimental-loader ./test/fixtures/es-module-loaders/missing-dynamic-instantiate-hook.mjs
import { expectsError } from '../common/index.mjs'; import { expectsError } from '../common/index.mjs';
import('test').catch(expectsError({ import('test').catch(expectsError({

View File

@ -1,4 +1,4 @@
// Flags: --experimental-modules --loader ./test/fixtures/es-module-loaders/builtin-named-exports-loader.mjs // Flags: --experimental-modules --experimental-loader ./test/fixtures/es-module-loaders/builtin-named-exports-loader.mjs
import '../common/index.mjs'; import '../common/index.mjs';
import { readFile } from 'fs'; import { readFile } from 'fs';
import assert from 'assert'; import assert from 'assert';

View File

@ -1,3 +1,3 @@
// Flags: --experimental-modules --loader ./test/fixtures/es-module-loaders/not-found-assert-loader.mjs // Flags: --experimental-modules --experimental-loader ./test/fixtures/es-module-loaders/not-found-assert-loader.mjs
/* eslint-disable node-core/require-common-first, node-core/required-modules */ /* eslint-disable node-core/require-common-first, node-core/required-modules */
import './not-found.js'; import './not-found.js';

View File

@ -1,3 +1,3 @@
// Flags: --experimental-modules --loader ./test/fixtures/es-module-loaders/not-found-assert-loader.mjs // Flags: --experimental-modules --experimental-loader ./test/fixtures/es-module-loaders/not-found-assert-loader.mjs
/* eslint-disable node-core/require-common-first, node-core/required-modules */ /* eslint-disable node-core/require-common-first, node-core/required-modules */
import './not-found.mjs'; import './not-found.mjs';

View File

@ -1,4 +1,4 @@
// Flags: --experimental-modules --loader ./test/fixtures/es-module-loaders/js-loader.mjs // Flags: --experimental-modules --experimental-loader ./test/fixtures/es-module-loaders/js-loader.mjs
/* eslint-disable node-core/require-common-first, node-core/required-modules */ /* eslint-disable node-core/require-common-first, node-core/required-modules */
import { namedExport } from '../fixtures/es-module-loaders/js-as-esm.js'; import { namedExport } from '../fixtures/es-module-loaders/js-as-esm.js';
import assert from 'assert'; import assert from 'assert';

View File

@ -1,4 +1,4 @@
// Flags: --experimental-modules --loader ./test/fixtures/es-module-loaders/loader-shared-dep.mjs // Flags: --experimental-modules --experimental-loader ./test/fixtures/es-module-loaders/loader-shared-dep.mjs
import { createRequire } from '../common/index.mjs'; import { createRequire } from '../common/index.mjs';
import assert from 'assert'; import assert from 'assert';

View File

@ -1,4 +1,4 @@
// Flags: --experimental-modules --loader ./test/fixtures/es-module-loaders/loader-unknown-builtin-module.mjs // Flags: --experimental-modules --experimental-loader ./test/fixtures/es-module-loaders/loader-unknown-builtin-module.mjs
import { expectsError, mustCall } from '../common/index.mjs'; import { expectsError, mustCall } from '../common/index.mjs';
import assert from 'assert'; import assert from 'assert';

View File

@ -87,6 +87,7 @@ const undocumented = difference(process.allowedNodeEnvironmentFlags,
assert(undocumented.delete('--debug-arraybuffer-allocations')); assert(undocumented.delete('--debug-arraybuffer-allocations'));
assert(undocumented.delete('--experimental-worker')); assert(undocumented.delete('--experimental-worker'));
assert(undocumented.delete('--no-node-snapshot')); assert(undocumented.delete('--no-node-snapshot'));
assert(undocumented.delete('--loader'));
assert.strictEqual(undocumented.size, 0, assert.strictEqual(undocumented.size, 0,
'The following options are not documented as allowed in ' + 'The following options are not documented as allowed in ' +