@@ -142,46 +142,52 @@ CommonJS. This includes the following:
142142*  Lexical redeclarations of the CommonJS wrapper variables (` require ` , ` module ` ,
143143  ` exports ` , ` __dirname ` , ` __filename ` ).
144144
145- ### Modules loaders  
146- 
147- Node.js has two systems for resolving a specifier and loading modules.
148- 
149- There is the CommonJS module loader:
150- 
151- *  It is fully synchronous.
152- *  It is responsible for handling ` require() `  calls.
153- *  It is monkey patchable.
154- *  It supports [ folders as modules] [ ] .
155- *  When resolving a specifier, if no exact match is found, it will try to add
156-   extensions (` .js ` , ` .json ` , and finally ` .node ` ) and then attempt to resolve
157-   [ folders as modules] [ ] .
158- *  It treats ` .json `  as JSON text files.
159- *  ` .node `  files are interpreted as compiled addon modules loaded with
160-   ` process.dlopen() ` .
161- *  It treats all files that lack ` .json `  or ` .node `  extensions as JavaScript
162-   text files.
163- *  It can only be used to [ load ECMAScript modules from CommonJS modules] [ ]  if
164-   the module graph is synchronous (that contains no top-level ` await ` ).
165-   When used to load a JavaScript text file that is not an ECMAScript module,
166-   the file will be loaded as a CommonJS module.
167- 
168- There is the ECMAScript module loader:
169- 
170- *  It is asynchronous, unless it's being used to load modules for ` require() ` .
171- *  It is responsible for handling ` import `  statements and ` import() `  expressions.
172- *  It is not monkey patchable, can be customized using [ loader hooks] [ ] .
173- *  It does not support folders as modules, directory indexes (e.g.
174-   ` './startup/index.js' ` ) must be fully specified.
175- *  It does no extension searching. A file extension must be provided
176-   when the specifier is a relative or absolute file URL.
177- *  It can load JSON modules, but an import type attribute is required.
178- *  It accepts only ` .js ` , ` .mjs ` , and ` .cjs `  extensions for JavaScript text
179-   files.
180- *  It can be used to load JavaScript CommonJS modules. Such modules
181-   are passed through the ` cjs-module-lexer `  to try to identify named exports,
182-   which are available if they can be determined through static analysis.
183-   Imported CommonJS modules have their URLs converted to absolute
184-   paths and are then loaded via the CommonJS module loader.
145+ ### Module resolution and loading  
146+ 
147+ Node.js has two types of module resolution and loading, chosen based on how the module is requested.
148+ 
149+ When a module is requested via ` require() ` :
150+ 
151+ *  Resolution:
152+   *  The resolution initiated by ` require() `  supports [ folders as modules] [ ] .
153+   *  When resolving a specifier, if no exact match is found, ` require() `  will try to add
154+     extensions (` .js ` , ` .json ` , and finally ` .node ` ) and then attempt to resolve
155+     [ folders as modules] [ ] .
156+ *  Loading:
157+   *  ` .json `  files are treated as JSON text files.
158+   *  ` .node `  files are interpreted as compiled addon modules loaded with ` process.dlopen() ` .
159+   *  ` .ts ` , ` .mts `  and ` .cts `  files are treated as [ TypeScript] [ ]  text files.
160+   *  Files with any other extension, or without extensions, are treated as JavaScript
161+     text files.
162+   *  ` require() `  only be used to [ load ECMAScript modules from CommonJS modules] [ ]  if
163+     the [ ECMAScript module] [ ES Module ]  and its dependencies are synchronous
164+     (i.e. they do not contain top-level ` await ` ).
165+ 
166+ When a module is requested via ` import `  statements or ` import() `  expressions:
167+ 
168+ *  Resolution:
169+   *  The resolution of ` import ` /` import() `  does not support folders as modules,
170+     directory indexes (e.g. ` './startup/index.js' ` ) must be fully specified.
171+   *  It does not perform extension searching. A file extension must be provided
172+     when the specifier is a relative or absolute file URL.
173+ *  Loading:
174+   *  ` .json `  files are treated as JSON text files. When importing JSON modules,
175+     an import type attribute is required (e.g.
176+     ` import json from './data.json' with { type: 'json' } ` ).
177+   *  ` .node `  files are interpreted as compiled addon modules loaded with
178+     ` process.dlopen() ` , if [ ` --experimental-addon-modules ` ] [ ]  is enabled.
179+   *  ` .ts ` , ` .mts `  and ` .cts `  files are treated as [ TypeScript] [ ]  text files.
180+   *  It accepts only ` .js ` , ` .mjs ` , and ` .cjs `  extensions for JavaScript text
181+     files.
182+   *  ` .wasm `  files are treated as [ WebAssembly modules] [ ] .
183+   *  Any other file extensions will result in a
184+     [ ` ERR_UNKNOWN_FILE_EXTENSION ` ] [ ]  error.
185+   *  ` import ` /` import() `  can be used to load JavaScript [ CommonJS modules] [ commonjs ] .
186+     Such modules are passed through the ` cjs-module-lexer `  to try to identify named
187+     exports, which are available if they can be determined through static analysis.
188+ 
189+ Regardless of how a module is requested, the resolution and loading process can be customized
190+ using [ loader hooks] [ ] .
185191
186192### ` package.json `  and file extensions 
187193
@@ -1151,21 +1157,25 @@ This field defines [subpath imports][] for the current package.
11511157[ Node.js documentation for this section ] : https://github.com/nodejs/node/blob/HEAD/doc/api/packages.md#conditions-definitions 
11521158[ Runtime Keys ] : https://runtime-keys.proposal.wintercg.org/ 
11531159[ Syntax detection ] : #syntax-detection 
1160+ [ TypeScript ] : typescript.md 
1161+ [ WebAssembly modules ] : esm.md#wasm-modules 
11541162[ WinterCG ] : https://wintercg.org/ 
11551163[ `"exports"` ] : #exports 
11561164[ `"imports"` ] : #imports 
11571165[ `"main"` ] : #main 
11581166[ `"name"` ] : #name 
11591167[ `"type"` ] : #type 
11601168[ `--conditions` / `-C` flag ] : #resolving-user-conditions 
1169+ [ `--experimental-addon-modules` ] : cli.md#--experimental-addon-modules 
11611170[ `--no-addons` flag ] : cli.md#--no-addons 
11621171[ `ERR_PACKAGE_PATH_NOT_EXPORTED` ] : errors.md#err_package_path_not_exported 
1172+ [ `ERR_UNKNOWN_FILE_EXTENSION` ] : errors.md#err_unknown_file_extension 
11631173[ `package.json` ] : #nodejs-packagejson-field-definitions 
11641174[ entry points ] : #package-entry-points 
11651175[ folders as modules ] : modules.md#folders-as-modules 
11661176[ import maps ] : https://github.com/WICG/import-maps 
11671177[ load ECMAScript modules from CommonJS modules ] : modules.md#loading-ecmascript-modules-using-require 
1168- [ loader hooks ] : esm .md#loaders 
1178+ [ loader hooks ] : module .md#customization-hooks 
11691179[ packages folder mapping ] : https://github.com/WICG/import-maps#packages-via-trailing-slashes 
11701180[ self-reference ] : #self-referencing-a-package-using-its-name 
11711181[ subpath exports ] : #subpath-exports 
0 commit comments