我正在制作一个nodejs应用程序作为cli工具。我使用yargs
来定义我的命令,并使用.config()
方法从.config或config.json文件加载默认配置设置,如下所示:
const findUp = require('find-up')
const fs = require('fs')
const yargs = require('yargs');
const configPath = findUp.sync(['.config', 'config.json']);
const config = configPath ? JSON.parse(fs.readFileSync(configPath)) : {};
yargs
.command( require('./command/command-name'))
.option( .... )
.config( config )
.argv
我想创建一个可以用来配置.config文件的命令。类似于:
my-tool configure --defaults key1=<value> key2=<value>
有没有npm包可以做到这一点,或者我必须自己滚动?
我自己滚动。
# configure.js
const findUp = require('find-up')
const fs = require('fs')
exports.command = 'configure'
exports.desc = 'Set or view your configuration'
exports.builder = {
'defaults': {
desc: 'set configuration values',
type: 'array',
group: 'Parameters:'
}
}
exports.handler = function (argv) {
const configPath = findUp.sync(['.config', 'config.json']);
const config = configPath ? JSON.parse(fs.readFileSync(configPath)) : {};
if (argv.defaults) {
argv.defaults.map( arg => {
var args = arg.split('=');
if (args[1]) {
config[args[0]] = args[1];
} else {
delete config[args[0]];
}
})
var file = configPath ? configPath : "./.config";
fs.writeFileSync(file, JSON.stringify(config, null, 2));
} else {
console.log( JSON.stringify(config, null, 2));
}
}