我已将npm CLI命令定义为mycommand
模块:
{
...
"name": "mycommand",
"bin": {
"mycommand": "bin/mycommand.js"
},
...
}
mycommand.js
看起来像这样:
#!/usr/bin/env node --harmony
console.log('...')
我希望能够以下列方式运行它,安装在另一个模块中:
{
..
"scripts": {
"mycommand": "mycommand --require ./bootstrap"
}
...
}
其中bootstrap
是我期望require
的模块 - 在mycommand
之前编辑。 --require
参数应该传递给运行mycommand
的节点。
结果&尝试
不幸的是,bootstrap
永远不需要。没有错误或其他错误路径解析的指示或某些此类错误。
如果我以不同的方式定义mycommand
脚本:
{
...
"scripts": {
"mycommand": "node --require ./bootstrap ./some-random-js-file"
}
...
}
bootstrap
是必需的,证明bootstrap
存在且--require
有效。
如果我require
bootstrap
模块直接在mycommand
(我不能真正做到 - 那么只是为了测试):
#!/usr/bin/env node --harmony
require('../../../bootstrap');
console.log('...')
bootstrap
。 注意 ../../../
可以补偿mycommand.js
在node_modules
内的位置。
假设
我假设--require
实际上从未传递给执行mycommand
的节点。
问题
如何做到这一点?
答案 0 :(得分:1)
您认为--require
永远不会传递给node
的假设是正确的:
当您运行node --require … path/to/mycommand.js
时,您将参数传递给node
。
当您运行mycommand --require …
时,您将参数传递给mycommand
。
(如果符合您的使用案例,您可以解析mycommand.js
和require()
中的命令行选项。
我假设您不想使用node … mycommand.js
方法,因为您需要指定脚本的路径,从而忽略了创建bin
字段的重点首先。
但是,由于您提供了bin
字段,因此您已经知道mycommand
的路径:
{
..
"scripts": {
"mycommand": "node --require ./bootstrap ./node_bin/mycommand"
}
...
}
或者可以是… $(npm bin)/mycommand
。