`program.parse(process.argv)` 在 commander.js 中做什么?
what does `program.parse(process.argv)` do in commander.js?
我想让用户 commander.js
和 inquirer.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)
时,一切正常,它可以 return 我新的 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
是an array containing the command line arguments passed when the Node.js process was launched。因此,program.parse(process.argv)
解析参数的命令行选项,这绕过了您的 inquierer.js
提示。你可以忽略它。
program.parse(process.argv)
在设置程序后调用。它接受命令行参数 (process.argv
) 并使用您声明的程序解析它们,显示错误或调用操作处理程序等。
根据您的示例代码,问题是操作处理程序采用函数参数。例如
.action(() => {
// code goes here
});
我想让用户 commander.js
和 inquirer.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)
时,一切正常,它可以 return 我新的 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
是an array containing the command line arguments passed when the Node.js process was launched。因此,program.parse(process.argv)
解析参数的命令行选项,这绕过了您的 inquierer.js
提示。你可以忽略它。
program.parse(process.argv)
在设置程序后调用。它接受命令行参数 (process.argv
) 并使用您声明的程序解析它们,显示错误或调用操作处理程序等。
根据您的示例代码,问题是操作处理程序采用函数参数。例如
.action(() => {
// code goes here
});