Skip to content

Commit

Permalink
doc: recommend package exports instead of requiring folders
Browse files Browse the repository at this point in the history
PR-URL: #41381
Reviewed-By: James M Snell <[email protected]>
Reviewed-By: Geoffrey Booth <[email protected]>
  • Loading branch information
aduh95 authored and danielleadams committed Mar 14, 2022
1 parent 5c387a0 commit 214cf17
Showing 1 changed file with 10 additions and 4 deletions.
14 changes: 10 additions & 4 deletions doc/api/modules.md
Original file line number Diff line number Diff line change
Expand Up @@ -434,8 +434,8 @@ If the given path does not exist, `require()` will throw an [`Error`][] with its

<!--type=misc-->

It is convenient to organize programs and libraries into self-contained
directories, and then provide a single entry point to those directories.
> Stability: 3 - Legacy: Use [subpath exports][] or [subpath imports][] instead.
There are three ways in which a folder may be passed to `require()` as
an argument.

Expand All @@ -452,8 +452,6 @@ If this was in a folder at `./some-library`, then
`require('./some-library')` would attempt to load
`./some-library/lib/some-library.js`.

This is the extent of the awareness of `package.json` files within Node.js.

If there is no [`package.json`][] file present in the directory, or if the
[`"main"`][] entry is missing or cannot be resolved, then Node.js
will attempt to load an `index.js` or `index.node` file out of that
Expand All @@ -470,6 +468,11 @@ with the default error:
Error: Cannot find module 'some-library'
```

In all three above cases, an `import('./some-library')` call would result in a
[`ERR_UNSUPPORTED_DIR_IMPORT`][] error. Using package [subpath exports][] or
[subpath imports][] can provide the same containment organization benefits as
folders as modules, and work for both `require` and `import`.

## Loading from `node_modules` folders

<!--type=misc-->
Expand Down Expand Up @@ -1076,6 +1079,7 @@ This section was moved to
[`"main"`]: packages.md#main
[`"type"`]: packages.md#type
[`ERR_REQUIRE_ESM`]: errors.md#err_require_esm
[`ERR_UNSUPPORTED_DIR_IMPORT`]: errors.md#err_unsupported_dir_import
[`Error`]: errors.md#class-error
[`__dirname`]: #__dirname
[`__filename`]: #__filename
Expand All @@ -1090,3 +1094,5 @@ This section was moved to
[exports shortcut]: #exports-shortcut
[module resolution]: #all-together
[native addons]: addons.md
[subpath exports]: packages.md#subpath-exports
[subpath imports]: packages.md#subpath-imports

0 comments on commit 214cf17

Please sign in to comment.