My question concerns an existing library that I wish to publish as an NPM module. The library is already in use, and currently require
d via the local file system.
How can I specify the root directory of my module's files?
If I have a structure like:
.
├── package.json
├── src
| ├── js
| └────── lib
| └───────── my
| └───────────── thing.js
| └───────────── that.js
How do I specify that the root of my module, and accessible files is src/js/lib/my/
?
I would like to use as follows from an outside project:
var thing = require('my/thing'),
that = require('my/that');
I saw the "files"
property in package.json, is this the right way to go?
The issue suggesting mainDir is now closed. Instead there is a new field called exports
which can be used almost like es import maps to map a folder to an export alias:
// ./node_modules/es-module-package/package.json
{
"exports": {
"./my/": "./src/js/lib/my/"
}
}
import thing from 'es-module-package/my/thing.js';
// Loads ./node_modules/es-module-package/src/js/lib/my/thing.js
As suggested in the issue linked in the original answer below it may be possible to map the root to a folder to access import thing from pkg/thing.js
as so:
{
"type": "module",
"main": "./dist/index.js",
"exports": {
"./": "./src/js/lib/my/"
}
}
For a native solution, see this node issue https://github.com/nodejs/node/issues/14970
The feature request suggests a mainDir
field in the package.json next to main.
The more people that vote, the faster/more likely it will be implemented