通过可执行(.bin)npm脚本调用时将参数传递给节点

通过可执行(.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

我已将npm CLI命令定义为
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('...')