mirror of
https://github.com/nodejs/node.git
synced 2024-11-21 10:59:27 +00:00
process: add process.features.require_module
For detecting whether `require(esm)` is supported without triggering the experimental warning. PR-URL: https://github.com/nodejs/node/pull/55241 Reviewed-By: Richard Lau <rlau@redhat.com> Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
This commit is contained in:
parent
deb5effe01
commit
b0f025208f
@ -318,6 +318,8 @@ experimental and can be disabled using `--no-experimental-require-module`.
|
||||
When `require()` actually encounters an ES module for the
|
||||
first time in the process, it will emit an experimental warning. The
|
||||
warning is expected to be removed when this feature stablizes.
|
||||
This feature can be detected by checking if
|
||||
[`process.features.require_module`][] is `true`.
|
||||
|
||||
## All together
|
||||
|
||||
@ -1280,6 +1282,7 @@ This section was moved to
|
||||
[`node:test`]: test.md
|
||||
[`package.json`]: packages.md#nodejs-packagejson-field-definitions
|
||||
[`path.dirname()`]: path.md#pathdirnamepath
|
||||
[`process.features.require_module`]: process.md#processfeaturesrequire_module
|
||||
[`require.main`]: #requiremain
|
||||
[exports shortcut]: #exports-shortcut
|
||||
[module resolution]: #all-together
|
||||
|
@ -1936,6 +1936,17 @@ added: v0.5.3
|
||||
|
||||
A boolean value that is `true` if the current Node.js build includes support for IPv6.
|
||||
|
||||
## `process.features.require_module`
|
||||
|
||||
<!-- YAML
|
||||
added: REPLACEME
|
||||
-->
|
||||
|
||||
* {boolean}
|
||||
|
||||
A boolean value that is `true` if the current Node.js build supports
|
||||
[loading ECMAScript modules using `require()`][].
|
||||
|
||||
## `process.features.tls`
|
||||
|
||||
<!-- YAML
|
||||
@ -4431,6 +4442,7 @@ cases:
|
||||
[built-in modules with mandatory `node:` prefix]: modules.md#built-in-modules-with-mandatory-node-prefix
|
||||
[debugger]: debugger.md
|
||||
[deprecation code]: deprecations.md
|
||||
[loading ECMAScript modules using `require()`]: modules.md#loading-ecmascript-modules-using-require
|
||||
[note on process I/O]: #a-note-on-process-io
|
||||
[process.cpuUsage]: #processcpuusagepreviousvalue
|
||||
[process_emit_warning]: #processemitwarningwarning-type-code-ctor
|
||||
|
@ -279,6 +279,9 @@ const features = {
|
||||
get cached_builtins() {
|
||||
return binding.hasCachedBuiltins();
|
||||
},
|
||||
get require_module() {
|
||||
return getOptionValue('--experimental-require-module');
|
||||
},
|
||||
};
|
||||
|
||||
ObjectDefineProperty(process, 'features', {
|
||||
|
37
test/es-module/test-require-module-feature-detect.js
Normal file
37
test/es-module/test-require-module-feature-detect.js
Normal file
@ -0,0 +1,37 @@
|
||||
'use strict';
|
||||
|
||||
// This tests that process.features.require_module can be used to feature-detect
|
||||
// require(esm) without triggering a warning.
|
||||
|
||||
require('../common');
|
||||
const { spawnSyncAndAssert } = require('../common/child_process');
|
||||
|
||||
spawnSyncAndAssert(process.execPath, [
|
||||
'--experimental-require-module',
|
||||
'-p',
|
||||
'process.features.require_module',
|
||||
], {
|
||||
trim: true,
|
||||
stdout: 'true',
|
||||
stderr: '', // Should not emit warnings.
|
||||
});
|
||||
|
||||
// It is now enabled by default.
|
||||
spawnSyncAndAssert(process.execPath, [
|
||||
'-p',
|
||||
'process.features.require_module',
|
||||
], {
|
||||
trim: true,
|
||||
stdout: 'true',
|
||||
stderr: '', // Should not emit warnings.
|
||||
});
|
||||
|
||||
spawnSyncAndAssert(process.execPath, [
|
||||
'--no-experimental-require-module',
|
||||
'-p',
|
||||
'process.features.require_module',
|
||||
], {
|
||||
trim: true,
|
||||
stdout: 'false',
|
||||
stderr: '', // Should not emit warnings.
|
||||
});
|
@ -14,6 +14,7 @@ const expectedKeys = new Map([
|
||||
['tls_ocsp', ['boolean']],
|
||||
['tls', ['boolean']],
|
||||
['cached_builtins', ['boolean']],
|
||||
['require_module', ['boolean']],
|
||||
['typescript', ['boolean', 'string']],
|
||||
]);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user