如何确定config / rc文件的项目根目录

时间:2018-01-12 18:48:23

标签: node.js configuration rc

我正在Node中编写一个CLI工具,我希望它可以在配置文件中由消费者项目使用时进行配置。非常类似于es-lint的.eslintrc或babel .bablerc的工作方式。

consumer-app
  node_modules
    my-cli-tool
      index.js ← my tool
  .configfile ← configuration file for the cli tool
  package.json

这些文件通常放在项目的根目录下,有时您可以在文件树的不同级别拥有多个配置文件。

consumer-app
  sub-directory
    .configfile ← another configuration file for this sub-dir
  node_modules
    my-cli-tool
      index.js ← my tool
  .configfile ← configuration file
  package.json

构建类似内容的整体架构是什么?我可以让我的模块查找其配置文件 - 但是我很难找到这些配置文件或项目的根目录,因为这很可能是他们将要去的地方。

1 个答案:

答案 0 :(得分:0)

我能够通过在给定__dirname的树上查找配置文件来解决此问题。

以下方法采用文件名并在__dirname所属的每个目录中向上扫描树,直到找到给定文件。这也使得每个目录都可以拥有自己的配置文件。

function getRootFile(filename) {
  return new Promise((resolve, reject) => {
    let lastFound = null;
    let lastScanned = __dirname;
    __dirname.split('/').slice(1).reverse().forEach(dir => {
      const parentPath = path.resolve(lastScanned, '../');
      if (fs.existsSync(path.join(parentPath, filename))) {
        lastFound = path.join(parentPath, filename);
      }
      lastScanned = parentPath;
    });
    resolve(lastFound);
  });
}

async function main() {
  const configPath = getRootFile('.myapprc')
}

这只是一个概念验证,所以它并不完美,但有些东西可以展示我想要实现的目标。