Node.js 如何使用npm babel和commanderjs将选项传递给脚本
有人能解释一下为什么我在检索选项'-x'时遇到困难(见下文) 我必须逃避一些角色吗 除此之外:Node.js 如何使用npm babel和commanderjs将选项传递给脚本,node.js,npm,babeljs,Node.js,Npm,Babeljs,有人能解释一下为什么我在检索选项'-x'时遇到困难(见下文) 我必须逃避一些角色吗 除此之外: 工作原理:node b.js解析url1 url2 url3-x 但这不是:npm运行babel节点a.js解析url1 url2 url3-x 这是我的package.json文件 { "name": "commander_test", "version": "1.0.0", "description": "", "main": "index.js", "scripts":
- 工作原理:
node b.js解析url1 url2 url3-x
- 但这不是:
npm运行babel节点a.js解析url1 url2 url3-x
{
"name": "commander_test",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"babel-node": "babel-node --presets=env",
"a": "npm run babel-node a.js parse url1 url2 url3 -x",
"b": "node b.js parse url1 url2 url3 -x ",
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC",
"dependencies": {
"commander": "^2.18.0"
},
"devDependencies": {
"babel-cli": "^6.26.0",
"babel-core": "^6.26.3",
"babel-preset-env": "^1.7.0",
"babel-preset-es2015": "^6.24.1"
}
}
npm运行a的结果:
npm运行b的结果
> commander_test@1.0.0 b D:\repositories\node\commander
> node b.js parse url1 url2 url3 -x
[ 'C:\\Program Files\\nodejs\\node.exe',
'D:\\repositories\\node\\commander\\b.js',
'parse',
'url1',
'url2',
'url3',
'-x' ]
parse : url1 => true
parse : url2 => true
parse : url3 => true
a.js和b.js这两个文件是相同的。
仅a.js使用es6模块和b.js Commonjs模块
import program from "commander" // a.js
let program = require("commander") // b.js
//from here it's the exact same code
console.log(process.argv)
program
.version('0.0.1')
.command('parse <urls...> ')
.option('-x, --opt', 'opt')
.action( function (urls, cmd) {
urls.forEach(url => {
console.log(`parse : ${url} => ${cmd.opt}`)
});
})
program.parse(process.argv)
从“指挥官”//a.js导入程序
让program=require(“commander”)//b.js
//从这里开始,它是完全相同的代码
console.log(process.argv)
程序
.版本('0.0.1')
.command('parse')
.option('-x,--opt',opt')
.action(函数(URL、cmd){
forEach(url=>{
log(`parse:${url}=>${cmd.opt}`)
});
})
program.parse(process.argv)
我看到了anwser[
多亏了Gajus,这里有了解决方案:他写道:
为了避免那些在工作中偶然发现这条线索的人感到困惑
future,下面是一个如何使用--的示例:
巴别塔节点--a--./foo--b在本例中:
--是传递给节点的选项(例如--debug或--throw deprecation)。
--b是传递给脚本的选项,即在process.argv下可用
根据此解决方案,我将脚本更改为:
"scripts": {
"a": "babel-node -- a.js parse url1 url2 url3 -x",
"b": "node b.js parse url1 url2 url3 -x ",
"test": "echo \"Error: no test specified\" && exit 1"
}
成功了
谢谢其他用户将您的问题标记为质量低下和需要改进。我重新编写了您的输入的文字/格式,以使其更易于阅读/理解。请查看我的更改,以确保它们反映您的意图。如果您有进一步的问题或反馈,请随时给我留言。
"scripts": {
"a": "babel-node -- a.js parse url1 url2 url3 -x",
"b": "node b.js parse url1 url2 url3 -x ",
"test": "echo \"Error: no test specified\" && exit 1"
}