有人可以向我解释为什么我在检索选项“ -x”时遇到麻烦吗(见下文)?
我是否必须转义一些字符?
除此之外:
node b.js parse url1 url2 url3 -x
npm run babel-node a.js parse url1 url2 url3 -x
这是我的package.json文件
{
"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的结果运行一个:
> commander_test@1.0.0 a D:\repositories\node\commander > npm run babel-node a.js parse url1 url2 url3 -x > commander_test@1.0.0 babel-node D:\repositories\node\commander > babel-node --presets=env "a.js" "parse" "url1" "url2" "url3" [ 'node', 'D:\\repositories\\node\\commander\\a.js', 'parse', 'url1', 'url2', 'url3' ] parse : url1 => undefined parse : url2 => undefined parse : url3 => undefined
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)
答案 0 :(得分:0)
我看到了答案[https://github.com/babel/babel/issues/1730#issuecomment-111247861]
感谢Gajus,这是解决方案:他写道:
为了避免对那些偶然发现该线程的人造成混淆 未来,这是一个如何使用-:
的示例babel-node --a-./foo --b在这种情况下:
-a是传递给节点的选项(例如--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"
}
而且有效!!
谢谢