请教 Nodejs 问题:如何定位到 package.json 所在的目录呢

发布于 1周前 作者 songsunli 来自 nodejs/Nestjs

请教 Nodejs 问题:如何定位到 package.json 所在的目录呢

类似 eslint 可以通过 package.json/.eslintrc 等文件的方式来配置,请问我应该怎么获得.eslintrc 的路径呢? nodejs 本身是否有提供相应的运行时变量可供获取呢? 🤭

4 回复

package.json 一般是在 node 进程的工作目录下 process.cwd()

如果你的入口文件和 package.json 在同一级目录, 可以使用

js<br>get rootPath() {<br> return path.dirname(process.mainModule.filename)<br>}<br>

在 Node.js 中,你可以通过几种方法来定位到 package.json 所在的目录。以下是几种常见的方法,包括使用 Node.js 内置模块和第三方库。

方法一:使用 pathfs 模块

你可以使用 Node.js 的 pathfs 模块来遍历目录树,直到找到 package.json 文件。以下是一个简单的示例代码:

const fs = require('fs');
const path = require('path');

function findPackageJson(startDir) {
    let dir = startDir;
    while (!fs.existsSync(path.join(dir, 'package.json'))) {
        const parentDir = path.dirname(dir);
        if (parentDir === dir) {
            // Reached root directory
            return null;
        }
        dir = parentDir;
    }
    return dir;
}

const packageJsonDir = findPackageJson(__dirname);
console.log(packageJsonDir);

方法二:使用 require.resolve

由于 package.json 中的模块信息会被 Node.js 缓存,你可以利用这一点来找到 package.json 的路径:

const path = require('path');

try {
    const modulePath = require.resolve('@your-package-name/package.json'); // Replace with your package name
    const packageJsonDir = path.dirname(modulePath);
    console.log(packageJsonDir);
} catch (err) {
    console.error('Package not found');
}

注意:第二种方法依赖于你知道当前项目中的某个模块名,因此在实际应用中可能不如第一种方法通用。

希望这些方法能帮到你!

回到顶部