doc: update experimental loader hooks example code
It fix 2 issues in provided Loader hooks examples: 1. Original ``new URL(`${process.cwd()}/`, 'file://');`` is not cross-platform, it gives wrong URL on windows 2. Based on `CHECK` in ModuleWrap::Resolve (node 12.9.1, https://github.com/nodejs/node/blob/v12.9.1/src/module_wrap.cc#L1132) the 2nd parameter should be a `string`, not an `URL` object PR-URL: https://github.com/nodejs/node/pull/29373 Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: David Carlier <devnexen@gmail.com> Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
This commit is contained in:
parent
e2dcbf1c32
commit
49cf67efd6
@ -573,8 +573,14 @@ The resolve hook returns the resolved file URL and module format for a
|
|||||||
given module specifier and parent file URL:
|
given module specifier and parent file URL:
|
||||||
|
|
||||||
```js
|
```js
|
||||||
const baseURL = new URL(`${process.cwd()}/`, 'file://');
|
import { URL, pathToFileURL } from 'url';
|
||||||
|
const baseURL = pathToFileURL(process.cwd()).href;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {string} specifier
|
||||||
|
* @param {string} parentModuleURL
|
||||||
|
* @param {function} defaultResolver
|
||||||
|
*/
|
||||||
export async function resolve(specifier,
|
export async function resolve(specifier,
|
||||||
parentModuleURL = baseURL,
|
parentModuleURL = baseURL,
|
||||||
defaultResolver) {
|
defaultResolver) {
|
||||||
@ -612,13 +618,21 @@ be written:
|
|||||||
import path from 'path';
|
import path from 'path';
|
||||||
import process from 'process';
|
import process from 'process';
|
||||||
import Module from 'module';
|
import Module from 'module';
|
||||||
|
import { URL, pathToFileURL } from 'url';
|
||||||
|
|
||||||
const builtins = Module.builtinModules;
|
const builtins = Module.builtinModules;
|
||||||
const JS_EXTENSIONS = new Set(['.js', '.mjs']);
|
const JS_EXTENSIONS = new Set(['.js', '.mjs']);
|
||||||
|
|
||||||
const baseURL = new URL(`${process.cwd()}/`, 'file://');
|
const baseURL = pathToFileURL(process.cwd()).href;
|
||||||
|
|
||||||
export function resolve(specifier, parentModuleURL = baseURL, defaultResolve) {
|
/**
|
||||||
|
* @param {string} specifier
|
||||||
|
* @param {string} parentModuleURL
|
||||||
|
* @param {function} defaultResolver
|
||||||
|
*/
|
||||||
|
export async function resolve(specifier,
|
||||||
|
parentModuleURL = baseURL,
|
||||||
|
defaultResolver) {
|
||||||
if (builtins.includes(specifier)) {
|
if (builtins.includes(specifier)) {
|
||||||
return {
|
return {
|
||||||
url: specifier,
|
url: specifier,
|
||||||
@ -627,7 +641,7 @@ export function resolve(specifier, parentModuleURL = baseURL, defaultResolve) {
|
|||||||
}
|
}
|
||||||
if (/^\.{0,2}[/]/.test(specifier) !== true && !specifier.startsWith('file:')) {
|
if (/^\.{0,2}[/]/.test(specifier) !== true && !specifier.startsWith('file:')) {
|
||||||
// For node_modules support:
|
// For node_modules support:
|
||||||
// return defaultResolve(specifier, parentModuleURL);
|
// return defaultResolver(specifier, parentModuleURL);
|
||||||
throw new Error(
|
throw new Error(
|
||||||
`imports must begin with '/', './', or '../'; '${specifier}' does not`);
|
`imports must begin with '/', './', or '../'; '${specifier}' does not`);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user