如何用参数运行npm {bin:script.js}
我打算做一些类似于lodash自定义构build。 所以一般来说,我想让用户写下如下命令:
lodash category=collection,function
哪个创build自定义模块只是我指定的类别
我阅读了几个教程如何用npm bin运行脚本。 为了以防万一我明白了错误,我写下了我的想法。
所以如果我有这个部分package.json :
"main": "bin/index.js", "bin": { "snippet": "bin/index.js" },
我npm install -g
控制台应该监听命令片段,当我写它时,它运行文件夹bin
的脚本index.js
。
这部分看起来对我来说是正确的。 当我有我的index.js简单的东西,即console.log('It Works')
。
在标准的情况下,你想让用户传递参数给脚本。 所以我发现所有的参数应该是variablesprocess.argv
。
process.argv
属性返回一个数组,其中包含启动Node.js进程时传递的命令行参数。 第一个元素是process.execPath。 第二个元素将成为正在执行的JavaScript文件的path。 其余的元素将是任何额外的命令行参数。
所以我只是console.log它并运行脚本。
-
如果我通过命令
snippet -f -a
运行脚本输出是:[ 'node', 'path/to/file' ]
-
如果我通过
node bin/index.js -f -a
运行脚本,输出是:[ 'node', 'path/to/file', '-f', '-a' ]
我不明白,它的脚本,但不同的输出。 不过,我尝试它看起来像当我通过bin命令调用脚本,它永远不会传递参数。
这里有谁有这方面的经验? 并告诉我我做错了什么?
或者另外还有一些其他方法如何做到这一点?
感谢您的任何build议。
但是现在我需要一个解决scheme,所以希望以后能帮到别人。
问题在哪里:
我注意到,我的Windows有默认程序来运行.js
文件设置为NODE.js
,因为它的默认设置当然所有.js
文件打开没有参数。
所以在我的情况下,每一个.js
文件打开NODE无论如何,我试图改变它打开像PSPAD或类似的东西,但这个基本上是开放的编辑器,而不是执行文件。
我是如何解决它的:
- 而不是使用执行.js直接与我做我的
./bin/index.js
二进制文件(基本上删除.js
后缀) - 在
index
文件的顶部添加#!/usr/bin/env node
- 转到
package.json
并将./bin/index.js
所有依赖项./bin/index.js
为./bin/index
Woala! 有用 :)
ps正如我在开始时提到的,我相信有一个选项可以用.js
来运行,但是我无法find它。 所以请如果有人会发现让我知道。 谢谢