通过可执行(.bin)npm脚本调用时将参数传递给节点
我已将npm CLI命令定义为通过可执行(.bin)npm脚本调用时将参数传递给节点,npm,command-line-interface,yarnpkg,npm-scripts,Npm,Command Line Interface,Yarnpkg,Npm Scripts,我已将npm CLI命令定义为mycommand模块: { ... “名称”:“mycommand”, “bin”:{ “mycommand”:“bin/mycommand.js” }, ... } 其中mycommand.js如下所示: #!/usr/bin/env node --harmony console.log('...') 我希望能够以以下方式运行它,安装在另一个模块中: { .. “脚本”:{ “mycommand”:“mycommand--require./bootstra
mycommand
模块:
{
...
“名称”:“mycommand”,
“bin”:{
“mycommand”:“bin/mycommand.js”
},
...
}
其中mycommand.js
如下所示:
#!/usr/bin/env node --harmony
console.log('...')
我希望能够以以下方式运行它,安装在另一个模块中:
{
..
“脚本”:{
“mycommand”:“mycommand--require./bootstrap”
}
...
}
其中,bootstrap
是我希望在mycommand
之前需要的一个模块。--require
参数应该传递给运行mycommand
的节点
结果和尝试
不幸的是,引导从来都不是必需的。
没有错误或其他路径分辨率不正确或类似的指示
如果我以不同的方式定义mycommand
脚本:
{
...
“脚本”:{
“mycommand”:“节点--需要./bootstrap./some随机js文件”
}
...
}
bootstrap
按预期需要,证明bootstrap
存在并且--require
有效
如果我直接在mycommand
中需要引导
模块(我真的做不到这一点,只是为了测试):
bootstrap
按预期需要请注意,。/../../
用于补偿节点单元中mycommand.js
的位置
假设
我假设--require
从未实际传递给执行mycommand
的节点
问题
如何做到这一点?您认为--require
从未传递给节点的假设是正确的:
- 当您运行
节点--require…path/to/mycommand.js
时,您正在向节点传递参数
- 当您运行
mycommand--require…
时,您正在将参数传递给mycommand
(您可以根据需要在mycommand.js
和require()
中解析命令行选项,如果这符合您的用例的话)
我假设您不想使用节点…mycommand.js
方法,因为您需要指定脚本的路径,因此首先失去了创建bin
字段的全部意义
但是,由于您提供了一个bin
字段,因此您已经有了到mycommand
的已知路径:
{
..
“脚本”:{
“mycommand”:“节点--要求./bootstrap./node\u bin/mycommand”
}
...
}
或者可以改为…$(npm-bin)/mycommand
哦,我知道参数被传递给命令。假设只是一种表达方式。。。通过node显式运行脚本是可能的,但非常难看。应该有一种方法可以做到这一点,因为某些CLI模块允许这样做。我担心他们真的重新解析和child.exec it。。。。
#!/usr/bin/env node --harmony
require('../../../bootstrap');
console.log('...')