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

Get installed package root path from within package

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

从我的包的 .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), '..');

.. 最后需要从 src/dist 跳转到根目录,因为我所有的 js 文件都位于 src/dist forders.