Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Root directory in package.json

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?

like image 637
Drahcir Avatar asked May 18 '15 12:05

Drahcir


1 Answers

UPDATE 2020

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/"   } } 

Original Answer

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

like image 62
Jordan Whitfield Avatar answered Oct 12 '22 00:10

Jordan Whitfield