如何使用参数运行npm {bin:script.js}

时间:2016-08-09 08:25:37

标签: javascript node.js npm

我计划制作与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文件。其余的元素将是   任何其他命令行参数。

所以我只需控制它。然后运行脚本。

  1. 如果我通过命令snippet -f -a运行脚本 输出为:[ 'node', 'path/to/file' ]

  2. 如果我通过node bin/index.js -f -a运行脚本 输出为:[ 'node', 'path/to/file', '-f', '-a' ]

  3. 我不明白,它的相同脚本但输出不同。但是我尝试看起来就像当我通过bin命令调用脚本时它从不传递参数。

    这里有人有经验吗?并告诉我我做错了什么?

    或者另外还有其他一些方法可以做到这一点吗?

    感谢您的任何建议。

1 个答案:

答案 0 :(得分:2)

现在我需要一段时间才有解决方案,所以希望以后可以帮助别人。

哪里出了问题:

我注意到我的Windows有默认程序运行.js文件设置为NODE.js,因为它的默认设置当然所有.js文件都在没有参数的情况下打开。

所以在我的情况下,每个.js文件打开NODE无论如何,我尝试将其更改为打开类似PSPAD或类似的东西但是这个基本打开的编辑器而不是执行文件。

我是如何解决的:

  1. 而不是直接使用.js执行我的./bin/index.js二进制文件(基本删除.js后缀)
  2. #!/usr/bin/env node文件
  3. 之上添加了index
  4. 转到package.json并将对./bin/index.js的所有依赖关系更改为./bin/index
  5. Woala!它有效:)

    P.S。正如我在开始时提到的,我相信有一个选项可以用.js运行它,但我无法找到它。所以,如果有人会发现它让我知道。 感谢