我正在构建一个npm包,它基本上是一个CLI工具。它旨在全局安装并与dist/clj.js
一起用作CLI,但也可以作为常规依赖项安装并通过dist/index.js
访问。
从我的包的.js
文件内部(如dist/cli.js
或dist/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
/dist
forders中,所以..
最终需要从src
/dist
跳到根。