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

And*_*rit 5 javascript node.js npm

我正在计划做类似lodash自定义构建的东西.所以一般来说我想让用户写命令如下:

lodash category=collection,function
Run Code Online (Sandbox Code Playgroud)

这与我指定的类别一起创建自定义模块

我阅读了一些教程如何使用npm bin运行脚本.万一我理解错了,我会按照自己的想法写出来.

所以如果我有这个部分的package.json:

"main": "bin/index.js",
 "bin": {
   "snippet": "bin/index.js"
 },
Run Code Online (Sandbox Code Playgroud)

npm install -g控制台应该监听命令片段,当我写它时,它运行index.js文件夹中的脚本bin.

这部分看起来对我来说是正确的.当我在index.js中有一些简单的东西时console.log('It Works').

在标准情况下,您希望让用户将参数传递给脚本.所以我发现所有参数都应该是多变的process.argv.

process.argv属性返回一个数组,其中包含启动Node.js进程时传递的命令行参数.第一个元素是process.execPath.第二个元素将是正在执行的JavaScript文件的路径.其余元素将是任何其他命令行参数.

所以我只是console.log它并运行脚本.

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

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

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

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

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

谢谢你的任何建议.

And*_*rit 5

这需要一些时间,但我现在有了解决方案,希望它能帮助以后的人。

哪里出了问题:

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

因此,就我而言,.js无论如何,每个文件都使用 NODE 打开,我尝试将其更改为使用 PSPAD 或类似的东西打开,但这基本上是打开编辑器而不是执行文件。

我是如何解决的:

  1. 我没有直接使用执行 .js 来制作./bin/index.js二进制文件(基本上删除了.js后缀)
  2. 添加到文件#!/usr/bin/env node顶部index
  3. 转到package.json并将所有依赖项更改./bin/index.js./bin/index

哇啦!有用 :)

ps 正如我在开始时提到的,我相信也有一个选项可以运行它.js,但我找不到它。因此,如果有人找到它,请告诉我。谢谢