我计划制作与lodash自定义版本类似的东西。所以一般来说我想让用户写命令如下:
lodash category=collection,function
使用我指定的类别
创建自定义模块我阅读了一些教程如何使用npm bin运行脚本。万一我理解错了,我会按照自己的想法写出来。
所以如果我有 package.json 这部分:
"main": "bin/index.js",
"bin": {
"snippet": "bin/index.js"
},
和npm install -g
控制台应该监听命令片段,当我编写它时,它会在文件夹index.js
中运行脚本bin
。
这部分看起来对我来说是正常的。当我在index.js中有一些简单的东西,即console.log('It Works')
。
在标准情况下,您希望让用户将参数传递给脚本。所以我发现所有参数都应该是变量process.argv
。
process.argv
属性返回包含命令行的数组 启动Node.js进程时传递的参数。首先 元素将是process.execPath。第二个元素是路径 到正在执行的JavaScript文件。其余的元素将是 任何其他命令行参数。
所以我只需控制它。然后运行脚本。
如果我通过命令snippet -f -a
运行脚本
输出为:[ 'node', 'path/to/file' ]
如果我通过node bin/index.js -f -a
运行脚本
输出为:[ 'node', 'path/to/file', '-f', '-a' ]
我不明白,它的相同脚本但输出不同。但是我尝试看起来就像当我通过bin命令调用脚本时它从不传递参数。
这里有人有经验吗?并告诉我我做错了什么?
或者另外还有其他一些方法可以做到这一点吗?
感谢您的任何建议。
答案 0 :(得分:2)
现在我需要一段时间才有解决方案,所以希望以后可以帮助别人。
哪里出了问题:
我注意到我的Windows有默认程序运行.js
文件设置为NODE.js
,因为它的默认设置当然所有.js
文件都在没有参数的情况下打开。
所以在我的情况下,每个.js
文件打开NODE无论如何,我尝试将其更改为打开类似PSPAD或类似的东西但是这个基本打开的编辑器而不是执行文件。
我是如何解决的:
./bin/index.js
二进制文件(基本删除.js
后缀)#!/usr/bin/env node
文件index
package.json
并将对./bin/index.js
的所有依赖关系更改为./bin/index
Woala!它有效:)
P.S。正如我在开始时提到的,我相信有一个选项可以用.js
运行它,但我无法找到它。所以,如果有人会发现它让我知道。
感谢