Skip to content
Permalink
Browse files

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: #29373
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: David Carlier <devnexen@gmail.com>
Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
  • Loading branch information...
zaverden authored and devnexen committed Aug 30, 2019
1 parent e2dcbf1 commit 1ecc406b77ba7573ed0b982a7e6654514c71a7a2
Showing with 19 additions and 5 deletions.
  1. +19 −5 doc/api/esm.md
@@ -573,8 +573,14 @@ The resolve hook returns the resolved file URL and module format for a
given module specifier and parent file URL:
```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,
parentModuleURL = baseURL,
defaultResolver) {
@@ -612,13 +618,21 @@ be written:
import path from 'path';
import process from 'process';
import Module from 'module';
import { URL, pathToFileURL } from 'url';
const builtins = Module.builtinModules;
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)) {
return {
url: specifier,
@@ -627,7 +641,7 @@ export function resolve(specifier, parentModuleURL = baseURL, defaultResolve) {
}
if (/^\.{0,2}[/]/.test(specifier) !== true && !specifier.startsWith('file:')) {
// For node_modules support:
// return defaultResolve(specifier, parentModuleURL);
// return defaultResolver(specifier, parentModuleURL);
throw new Error(
`imports must begin with '/', './', or '../'; '${specifier}' does not`);
}

0 comments on commit 1ecc406

Please sign in to comment.
You can’t perform that action at this time.