从包中获取已安装的包根路径



我正在构建一个npm包,它基本上是一个CLI工具。它旨在全局安装并与dist/clj.js一起用作CLI,但也可以作为常规依赖项安装并通过dist/index.js访问。

从我的包的.js文件内部(如dist/cli.jsdist/index.js(,我想获得到我的包根目录(package.json所在的位置(的绝对路径。

我知道__dirname可以做到这一点,但对于我项目中的不同文件,它需要不同的操作:

// dist/cli.js
console.log(require('path').join(__dirname, '..'));
// dist/a/b/c/foo.js
console.log(require('path').join(__dirname, '..', '..', '..', '..'));

有没有更好的方法可以从该包内的任何.js文件中获取全局或本地安装的包的根目录,无论该包在哪个文件夹中使用?

此代码似乎可以在包中的任何文件中工作:

const path = require('path');
let packageRootPath = path.join(path.dirname(require.main.filename), '..');

由于我所有的js文件都位于src/distforders中,所以..最终需要从src/dist跳到根。

最新更新