我正在学习如何使用node.js,但是在解析命令行参数时遇到了问题。以下一行:
node test.js --input=in.txt
代码到达此命令时出现解析错误:
var fileName = JSONparse.(process.argv[2]);
导致错误:
undefined
--input=in.txt
Syntax error: Unexpected number
我要做的是为输入文件创建一个可选变量。如果未在命令行中指定,则应解析为“a.txt”。
我还没有找到一种简单的方法来创建默认参数,或者使用诸如'--input ='之类的标识符来不必担心参数传递的顺序(我知道在这种情况下它与无关紧要)一个论点)。
答案 0 :(得分:1)
Vorpal.js是我在Node中构建交互式CLI的框架。作为其中的一部分,它具有内置的API,便于命令解析。
答案 1 :(得分:0)
最佳选择:使用现有的命令行解析器。 yargs模块运行良好。
如果你想自己动手,这就是我采取的方法。首先,创建一个包含所有默认值的对象:
var opts = {
inputStream: process.stdin,
verbose: false
};
...然后循环遍历args,随时替换选项。如果没有选项,则使用默认值:
for (var i = 2; i < process.argv.length; i++) {
var arg = process.argv[i];
var keyValue = arg.split('=');
var key = keyValue[0], value = keyValue[1];
if (key === '--input' || key === '-i') {
opts.inputStream = fs.createReadStream(value);
}
if (key === '---verbose' || key === '-v') {
opts.verbose = true;
}
// etc.
}
答案 2 :(得分:0)
如果要解析某些内容,则应为字符串化的JSON对象,否则解析结果将出错。 重要的是要知道节点js中的所有命令行参数都是字符串
let fileName = 'a.txt'
process.argv.slice(2).forEach((arg) => {
if(arg.indexOf('--input') !== -1){
if(arg.indexOf('=') !== -1){
fileName = arg.split("=")[1].trim()
} else {
console.log('Error in providing command line argument')
}
}
})
console.log("File Name is ",fileName)
对于node index
输出将为
文件名是a.txt
对于node index --input=hello.txt
,输出将为
文件名是hello.txt