简体   繁体   中英

How to get the root of project which installed my npm module?

I am developing an NPM package. Now I want to know the easiest way to get the root of the project which utilizes my custom package.

Within my package itself it is pretty easy to get the root in node.js like so:

__dirname

This points to the root of my package itself though. I would like to get the root of the project which actually performed the npm install of my package though.

Obviously, I could simply go up from the node_modules directory and assume that the root directory is there but this sounds really bad.

Is there a standard way to achieve this?

You can use the info from: require.main

The Module object representing the entry script loaded when the Node.js process launched. See "Accessing the main module".

const path = require('path');
console.log(path.dirname(require.main.filename));

Having this folder structure:

/app
  entry.js
  node_modules/
    my-package/
      index.js

app/entry.js

const myPackage = require('my-package');

app/node_modules/my-package/index.js

const path = require('path');
console.log(path.dirname(require.main.filename));

And when you call: node entry.js

You will get: /app printed to stdout.

you could use app-root-path which is an npm module and its pretty neat.

npm i -S app-root-path

after that just do

var reqlib = require('app-root-path').require;
var myModule = reqlib('/lib/my-module.js');

KISS

const fullPath = path.dirname(require.main.filename);
const regexResp = /^(.*?)node_modules/.exec(fullPath);
const appRoot = regexResp ? regexResp[1] : fullPath;
console.log(appRoot); // outputs the directory which is the root of this project

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM