如何使用 npm babel 和 commandjs 将选项传递给脚本 [重复]
Posted
技术标签:
【中文标题】如何使用 npm babel 和 commandjs 将选项传递给脚本 [重复]【英文标题】:how to pass options to scripts using npm babel and commanderjs [duplicate] 【发布时间】:2019-02-15 00:29:31 【问题描述】:有人能解释一下为什么我无法检索选项“-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 run 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)
【问题讨论】:
其他用户将您的问题标记为低质量和需要改进。我重新措辞/格式化您的输入,使其更容易阅读/理解。请查看我的更改以确保它们反映您的意图。如果您对我有其他问题或反馈,请随时给我留言。 【参考方案1】:我看到了答案 [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"
它成功了!
谢谢
【讨论】:
以上是关于如何使用 npm babel 和 commandjs 将选项传递给脚本 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
无法使用 webpack 4 和 babel 7 导入 soap-npm 模块