My question concerns an existing library that I wish to publish as an NPM module. The library is already in use, and currently required 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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With