To set the main entry point for a package, it is advisable to define both
["exports"
][] and ["main"
][] in the package’s [package.json
][] file:
{
"main": "./main.js",
"exports": "./main.js"
}
When the ["exports"
][] field is defined, all subpaths of the package are
encapsulated and no longer available to importers. For example,
require('pkg/subpath.js')
throws an [ERR_PACKAGE_PATH_NOT_EXPORTED
][]
error.
This encapsulation of exports provides more reliable guarantees
about package interfaces for tools and when handling semver upgrades for a
package. It is not a strong encapsulation since a direct require of any
absolute subpath of the package such as
require('/path/to/node_modules/pkg/subpath.js')
will still load subpath.js
.