mirror of
https://github.com/nodejs/node.git
synced 2026-10-28 18:25:13 +08:00
module: runtime-deprecate module.register()
PR-URL: https://github.com/nodejs/node/pull/62401 Reviewed-By: Matteo Collina <matteo.collina@gmail.com> Reviewed-By: Zeyu "Alex" Yang <himself65@outlook.com> Reviewed-By: Gürgün Dayıoğlu <hey@gurgun.day> Reviewed-By: Filip Skokan <panva.ip@gmail.com> Reviewed-By: Joyee Cheung <joyeec9h3@gmail.com> Reviewed-By: Jacob Smith <jacob@frende.me>
This commit is contained in:
1 parent
12c2736546
commit
0dfdec9542
5 files changed
+90
-2
No files matched your search
+13
-1
@@ -4527,16 +4527,27 @@ deprecated and will throw an error in a future version.
|
||||
|
||||
<!-- YAML
|
||||
changes:
|
||||
- version: REPLACEME
|
||||
pr-url: https://github.com/nodejs/node/pull/62401
|
||||
description: Runtime deprecation.
|
||||
- version: REPLACEME
|
||||
pr-url: https://github.com/nodejs/node/pull/62395
|
||||
description: Documentation-only deprecation.
|
||||
-->
|
||||
|
||||
Type: Documentation-only
|
||||
Type: Runtime
|
||||
|
||||
[`module.register()`][] is deprecated. Use [`module.registerHooks()`][]
|
||||
instead.
|
||||
|
||||
The `module.register()` API provides off-thread async hooks for customizing ES modules;
|
||||
the `module.registerHooks()` API provides similar hooks that are synchronous, in-thread, and
|
||||
work for all types of modules.
|
||||
Supporting async hooks has proven to be complex, involving worker threads orchestration, and there are issues
|
||||
that have proven unresolveable. See [caveats of asynchronous customization hooks][]. Please migrate to
|
||||
`module.registerHooks()` as soon as possible as `module.register()` will be
|
||||
removed in a future version of Node.js.
|
||||
|
||||
[DEP0142]: #dep0142-repl_builtinlibs
|
||||
[NIST SP 800-38D]: https://nvlpubs.nist.gov/nistpubs/Legacy/SP/nistspecialpublication800-38d.pdf
|
||||
[RFC 6066]: https://tools.ietf.org/html/rfc6066#section-3
|
||||
@@ -4696,6 +4707,7 @@ instead.
|
||||
[`zlib.bytesWritten`]: zlib.md#zlibbyteswritten
|
||||
[alloc]: buffer.md#static-method-bufferallocsize-fill-encoding
|
||||
[alloc_unsafe_size]: buffer.md#static-method-bufferallocunsafesize
|
||||
[caveats of asynchronous customization hooks]: module.md#caveats-of-asynchronous-customization-hooks
|
||||
[from_arraybuffer]: buffer.md#static-method-bufferfromarraybuffer-byteoffset-length
|
||||
[from_string_encoding]: buffer.md#static-method-bufferfromstring-encoding
|
||||
[legacy URL API]: url.md#legacy-url-api
|
||||
|
||||
@@ -180,6 +180,9 @@ added:
|
||||
- v18.19.0
|
||||
deprecated: REPLACEME
|
||||
changes:
|
||||
- version: REPLACEME
|
||||
pr-url: https://github.com/nodejs/node/pull/62401
|
||||
description: Runtime deprecation (DEP0205).
|
||||
- version: REPLACEME
|
||||
pr-url: https://github.com/nodejs/node/pull/62395
|
||||
description: Documentation-only deprecation (DEP0205). Use
|
||||
|
||||
@@ -31,7 +31,10 @@ const {
|
||||
} = require('internal/errors').codes;
|
||||
const { getOptionValue } = require('internal/options');
|
||||
const { isURL, pathToFileURL } = require('internal/url');
|
||||
const { kEmptyObject } = require('internal/util');
|
||||
const {
|
||||
getDeprecationWarningEmitter,
|
||||
kEmptyObject,
|
||||
} = require('internal/util');
|
||||
const {
|
||||
compileSourceTextModule,
|
||||
SourceTextModuleTypes: { kUser },
|
||||
@@ -955,7 +958,16 @@ function isCascadedLoaderInitialized() {
|
||||
* });
|
||||
* ```
|
||||
*/
|
||||
const emitRegisterDeprecation = getDeprecationWarningEmitter(
|
||||
'DEP0205',
|
||||
'`module.register()` is deprecated. Use `module.registerHooks()` instead.',
|
||||
undefined,
|
||||
false,
|
||||
);
|
||||
|
||||
function register(specifier, parentURL = undefined, options) {
|
||||
emitRegisterDeprecation();
|
||||
|
||||
if (parentURL != null && typeof parentURL === 'object' && !isURL(parentURL)) {
|
||||
options = parentURL;
|
||||
parentURL = options.parentURL;
|
||||
|
||||
@@ -0,0 +1,60 @@
|
||||
import { spawnPromisified } from '../common/index.mjs';
|
||||
import * as fixtures from '../common/fixtures.mjs';
|
||||
|
||||
import assert from 'node:assert';
|
||||
import { execPath } from 'node:process';
|
||||
import { describe, it } from 'node:test';
|
||||
|
||||
const urlToRegister = fixtures.fileURL('es-module-loaders', 'loader-resolve-passthru.mjs');
|
||||
const urlToRegisterEscaped = JSON.stringify(urlToRegister.href);
|
||||
|
||||
|
||||
describe('module.register() deprecation (DEP0205)', { concurrency: !process.env.TEST_PARALLEL }, () => {
|
||||
it('emits DEP0205 when module.register() is called', async () => {
|
||||
const { code, stderr } = await spawnPromisified(execPath, [
|
||||
'--input-type=module',
|
||||
'--eval',
|
||||
`import { register } from 'node:module'; register(${urlToRegisterEscaped});`,
|
||||
]);
|
||||
|
||||
assert.match(stderr, /\[DEP0205\]/);
|
||||
assert.strictEqual(code, 0);
|
||||
});
|
||||
|
||||
it('only emits the warning once per process', async () => {
|
||||
const { code, stderr } = await spawnPromisified(execPath, [
|
||||
'--input-type=module',
|
||||
'--eval',
|
||||
`import { register } from 'node:module';
|
||||
register(${urlToRegisterEscaped});
|
||||
register(${urlToRegisterEscaped});`,
|
||||
]);
|
||||
|
||||
assert.strictEqual(stderr.split('[DEP0205]').length - 1, 1);
|
||||
assert.strictEqual(code, 0);
|
||||
});
|
||||
|
||||
it('does not emit when --no-deprecation is set', async () => {
|
||||
const { code, stderr } = await spawnPromisified(execPath, [
|
||||
'--no-deprecation',
|
||||
'--input-type=module',
|
||||
'--eval',
|
||||
`import { register } from 'node:module'; register(${urlToRegisterEscaped});`,
|
||||
]);
|
||||
|
||||
assert.doesNotMatch(stderr, /DEP0205/);
|
||||
assert.strictEqual(code, 0);
|
||||
});
|
||||
|
||||
it('throws when --throw-deprecation is set', async () => {
|
||||
const { code, stderr } = await spawnPromisified(execPath, [
|
||||
'--throw-deprecation',
|
||||
'--input-type=module',
|
||||
'--eval',
|
||||
`import { register } from 'node:module'; register(${urlToRegisterEscaped});`,
|
||||
]);
|
||||
|
||||
assert.match(stderr, /DEP0205/);
|
||||
assert.notStrictEqual(code, 0);
|
||||
});
|
||||
});
|
||||
@@ -7,6 +7,7 @@ import { spawnSyncAndAssert } from '../common/child_process.js';
|
||||
spawnSyncAndAssert(
|
||||
execPath,
|
||||
[
|
||||
'--no-deprecation',
|
||||
'--no-experimental-require-module',
|
||||
'--import',
|
||||
fixtures.fileURL('es-module-loaders/builtin-named-exports.mjs'),
|
||||
|
||||
Reference in new issue
Block a user