我已经将npm CLI命令定义为mycommand
模块:
{
...
"name": "mycommand",
"bin": {
"mycommand": "bin/mycommand.js"
},
...
}
其中mycommand.js
如下所示:
#!/usr/bin/env node --harmony
console.log('...')
我希望能够以以下方式运行它,安装在另一个模块中:
{
..
"scripts": {
"mycommand": "mycommand --require ./bootstrap"
}
...
}
其中CCD_ 3是我期望在CCD_ 5之前被CCD_。--require
参数应该传递给运行mycommand
的Node。
结果&尝试次数
不幸的是,
bootstrap
从来都不是必需的没有错误或其他路径分辨率不正确的指示。如果我用不同的方式定义
mycommand
脚本:{ ... "scripts": { "mycommand": "node --require ./bootstrap ./some-random-js-file" } ... }
bootstrap
如预期的那样是必需的,证明bootstrap
存在并且--require
工作。
如果我直接在
mycommand
中require
bootstrap
模块(我真的做不到——所以只是为了测试):#!/usr/bin/env node --harmony require('../../../bootstrap'); console.log('...')
bootstrap
按预期是必需的注意../../../
用于补偿mycommand.js
在node_modules
中的位置。
假设
我假设CCD_ 20从未实际传递给执行CCD_ 21的Node。
问题
如何做到这一点?
您关于--require
从未传递给node
的假设是正确的:
-
运行
node --require … path/to/mycommand.js
时,将参数传递给node
。 -
运行
mycommand --require …
时,将参数传递给mycommand
。
(如果适合您的用例,您可以根据需要解析mycommand.js
和require()
中的命令行选项)
我假设您不想使用bootstrap
0方法,因为您需要指定脚本的路径,从而失去了创建bin
字段的全部意义。
但是,由于您已经提供了一个bin
字段,您就已经有了一个通往mycommand
:的已知路径
{
..
"scripts": {
"mycommand": "node --require ./bootstrap ./node_bin/mycommand"
}
...
}
或者可以改为… $(npm bin)/mycommand