'program.parse(process.argv)'在Commander.js中做了什么?



我想用commander.jsinquirer.js提出问题并收集答案以创建一个User实例:

// index.js
const mongoose = require('mongoose');
const User = require('./model/user')
const {addUser,listAllUsers,findUserByEmail,updateUser,deleteUser} = require('./model_methods/user_methods')
const { program } = require('commander');
var inquirer = require('inquirer');
// connect to DB
const db = mongoose.connect('mongodb://localhost:27017/myImportantDates', {
useNewUrlParser: true, 
useUnifiedTopology: true, 
});
const questions = [
{
type: 'input',
name: 'email',
message: 'user email'
},
{
type: 'input',
name: 'name',
message: 'user name'
},
{
type: 'input',
name: 'password',
message: 'user password'
},
];

program
.version('0.0.1')
.description('The important dates app');
program
.command('add')
.alias('a')
.description('Add a user')
.action(
inquirer
.prompt(questions)
.then( answers => {
addUser(answers)
})
.catch(err =>{
console.log(error) 
})
)
program.parse(process.argv);

当我用node index.js add运行它时,问题数组会问一个问题并退出:

@DESKTOP-5920U38:/mnt/c/Users/myApp$ node index.js add
? user email 
@DESKTOP-5920U38:/mnt/c/Users/myApp$ 

但是,当我删除program.parse(process.argv)时,一切正常,它可以向我返回新的User实例。

我检查文件:https://github.com/tj/commander.js/仍然不知道发生了什么。有人知道更多吗??

我刚才发现,如果我在program实例的第一个设置中像这样在开头program.parse(process.argv)

program
.version('0.0.1')
.description('The important dates app')
.parse(process.argv);

它也可以工作。但我仍然不知道为什么顺序很重要。

在 Node.js中,process.argv是一个数组,其中包含启动 Node.js 进程时传递的命令行参数。因此,program.parse(process.argv)解析参数的命令行选项,这会绕过inquierer.js提示符。你可以把它排除在外。

program.parse(process.argv)

在设置程序后调用。它采用命令行参数(process.argv(并使用您声明的程序解析它们,显示错误或调用动作处理程序等。

根据您的示例代码,一个问题是操作处理程序采用函数参数。

.action(() => {
// code goes here
});

相关内容

  • 没有找到相关文章

最新更新