node.js命令行程序(使用commander节点模块)在执行时打开index.js

我正在使用commander@2.9.0 。 附上下面的代码

的package.json

{ "name": "commandtools", "version": "1.0.0", "description": "A command line example", "main": "index.js", "scripts": { "test": "node index.js hello" }, "author": "aaa <aaa@xxx.com>", "license": "MIT", "bin": { "cmdtools":"./index.js" }, "dependencies": { "commander": "^2.9.0" } } 

index.js

 var program = require('commander'); program .version('0.0.1') .usage('<input>') .parse(process.argv); if(!program.args.length) { program.help(); } else { console.log('Input: ' + program.args); } 

在命令行中执行时,

 cmdtools Hello 

index.js文件在命令行中没有任何输出时打开

执行时,

 npm test 

输出是

 Input: hello 

我错过了什么?

您的代码输出在命令行中传递的参数。

npm test输出Input: hello ,因为npm test实际运行node index.js hello 。 如果将node index.js hello更改为node index.js banana则输出将为Input: banana

有关CLI参数的更多信息以及如何在这里访问它们: https : //nodejs.org/api/process.html#process_process_argv

cmdtools命令不会输出任何内容,因为没有parameter passing给index.js文件。

运行cmdtools命令时,您将parameter passing给cmdtools命令而不传递给index.js 。 没有输出,因为program.help()不会输出任何东西到控制台。 您可以通过运行console.log('test')而不是program.help()console.log('test')

在npm模块中的错误是

  • 全局安装了软件包,但没有执行npm链接
  • 所以,执行npm链接并尝试cmdtools Hello并得到了预期的输出