Content-Length: 415523 | pFad | http://github.com/joyeecheung/node/commit/f5beef8fbd70345c3507c05cd9f2579b5dcf91a0

D9 process: add process.features.require_module · joyeecheung/node@f5beef8 · GitHub
Skip to content

Commit f5beef8

Browse files
committed
process: add process.features.require_module
For detecting whether `require(esm)` is supported without triggering the experimental warning. PR-URL: nodejs#55241 Reviewed-By: Richard Lau <rlau@redhat.com> Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
1 parent 534c432 commit f5beef8

File tree

4 files changed

+45
-0
lines changed

4 files changed

+45
-0
lines changed

doc/api/modules.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -318,6 +318,8 @@ experimental and can be disabled using `--no-experimental-require-module`.
318318
When `require()` actually encounters an ES module for the
319319
first time in the process, it will emit an experimental warning. The
320320
warning is expected to be removed when this feature stablizes.
321+
This feature can be detected by checking if
322+
`process.features.require_module` is `true`.
321323

322324
## All together
323325

lib/internal/bootstrap/node.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -268,6 +268,9 @@ const features = {
268268
get cached_builtins() {
269269
return binding.hasCachedBuiltins();
270270
},
271+
get require_module() {
272+
return getOptionValue('--experimental-require-module');
273+
},
271274
};
272275

273276
ObjectDefineProperty(process, 'features', {
@@ -299,6 +302,8 @@ ObjectDefineProperty(process, 'features', {
299302
}
300303

301304
const { emitWarning, emitWarningSync } = require('internal/process/warning');
305+
const { getOptionValue } = require('internal/options');
306+
302307
process.emitWarning = emitWarning;
303308
internalBinding('process_methods').setEmitWarningSync(emitWarningSync);
304309

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
'use strict';
2+
3+
// This tests that process.features.require_module can be used to feature-detect
4+
// require(esm) without triggering a warning.
5+
6+
require('../common');
7+
const { spawnSyncAndAssert } = require('../common/child_process');
8+
9+
spawnSyncAndAssert(process.execPath, [
10+
'--experimental-require-module',
11+
'-p',
12+
'process.features.require_module',
13+
], {
14+
trim: true,
15+
stdout: 'true',
16+
stderr: '', // Should not emit warnings.
17+
});
18+
19+
// It is now enabled by default.
20+
spawnSyncAndAssert(process.execPath, [
21+
'-p',
22+
'process.features.require_module',
23+
], {
24+
trim: true,
25+
stdout: 'true',
26+
stderr: '', // Should not emit warnings.
27+
});
28+
29+
spawnSyncAndAssert(process.execPath, [
30+
'--no-experimental-require-module',
31+
'-p',
32+
'process.features.require_module',
33+
], {
34+
trim: true,
35+
stdout: 'false',
36+
stderr: '', // Should not emit warnings.
37+
});

test/parallel/test-process-features.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ assert.deepStrictEqual(keys, new Set([
1010
'debug',
1111
'uv',
1212
'ipv6',
13+
'require_module',
1314
'tls_alpn',
1415
'tls_sni',
1516
'tls_ocsp',

0 commit comments

Comments
 (0)








ApplySandwichStrip

pFad - (p)hone/(F)rame/(a)nonymizer/(d)eclutterfier!      Saves Data!


--- a PPN by Garber Painting Akron. With Image Size Reduction included!

Fetched URL: http://github.com/joyeecheung/node/commit/f5beef8fbd70345c3507c05cd9f2579b5dcf91a0

Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy