node.js命令行程序(使用commander node-module)在执行时打开index.js

时间:2017-02-21 12:33:41

标签: javascript node.js command-line npm jcommander

我正在使用 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

我错过了什么?

2 个答案:

答案 0 :(得分:0)

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

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命令不输出任何内容,因为没有参数传递给index.js文件。

运行cmdtools命令时,您将参数传递给cmdtools命令而不是index.js。没有输出,因为program.help()不向控制台输出任何内容。您可以通过运行console.log('test')而不是program.help()来测试此问题。

答案 1 :(得分:0)

npm模块中的错误是

  • 全局安装软件包,但未执行npm link
  • 因此,执行了npm链接并尝试了cmdtools Hello并得到了预期的输出