我正在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
构建类似内容的整体架构是什么?我可以让我的模块查找其配置文件 - 但是我很难找到这些配置文件或项目的根目录,因为这很可能是他们将要去的地方。
答案 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')
}
这只是一个概念验证,所以它并不完美,但有些东西可以展示我想要实现的目标。