node.js命令行教程图文详解(2)

var program = require('commander'); program .command('rm <dir>') //<>必选参数,如果是[]则是可选参数 .option('-r, --recursive', 'Remove recursively') .action(function (dir, cmd) { console.log('remove ' + dir + (cmd.recursive ? ' recursively' : '')) }) program.parse(process.argv) // command()可变参数 /** 命令command有且只有最后一个参数可变不固定的。 要使参数变量可变,必须将...附加到参数名称。**/ program .version('0.1.0') .command('rmdir <dir> [otherDirs...]') .action(function (dir, otherDirs) { console.log('rmdir %s', dir); if (otherDirs) { otherDirs.forEach(function (oDir) { console.log('rmdir %s', oDir); }); } }); program.parse(process.argv);

program.action() 定义命令的回调函数

var program = require("commander"); program .command("rm <dir>") .option("-r, --recursive", "Remove recursively") .option("-f, --force", "remove force") .action(function(dir, cmd) { // cmd为option参数选项 //console.log('cmd',cmd) if (cmd.recursive) { console.log("remove " + dir + " recursively"); } if (cmd.force) { console.log("remove " + dir + " forcefully"); } }); program.parse(process.argv);

inquirer.js

Inquirer.js 使用NodeJs做的一个通用交互式命令行用户界面的集合。具有常用的控制台交互操作。

node.js命令行教程图文详解

由于交互的问题种类不同,inquirer为每个问题提供很多参数:

type:表示提问的类型,包括:input, confirm, list, rawlist, expand, checkbox, password, editor;

name: 存储当前问题回答的变量;

message:问题的描述;

default:默认值;

choices:列表选项,在某些type下可用,并且包含一个分隔符(separator);

validate:对用户的回答进行校验;

filter:对用户的回答进行过滤处理,返回处理后的值;

transformer:对用户回答的显示效果进行处理(如:修改回答的字体或背景颜色),但不会影响最终的答案的内容;

when:根据前面问题的回答,判断当前问题是否需要被回答;

pageSize:修改某些type类型下的渲染行数;

prefix:修改message默认前缀;

suffix:修改message默认后缀。

创建cli.js

const program = require('commander') const inquirer = require('inquirer') const fs = require('fs') const path = require('path') const pkg = require('../package.json') const CWD = process.cwd() const promptList = [ { type: 'list', message: '请选择一种模版', name: 'template', choices: ['vue', 'angular', 'webpack-m-pages'], filter: function(val) { return val.toLowerCase() } } ] program .version(pkg.version) .command('create <dir>') .description('create project template') .action(function(dir, cmd) { const TEMPLATE_PATH = path.join(CWD, dir) if (fs.existsSync(TEMPLATE_PATH)) { } else { fs.mkdirSync(TEMPLATE_PATH) } if (dir) { inquirer.prompt(promptList).then(anwsers => { console.log(anwsers) }) } }) program.parse(process.argv)

运行 node cli/cli.js create vue

已经可以运行了,我们自定义一个命名替代每次都执行node

命令为:test-cli create <dir>

1、创建bin文件夹,在bin文件夹下创建index.js文件

#!/usr/bin/env node require('../cli/cli')

2、修改package.json文件

添加bin选项

"bin": { "test-cli": "./bin/index.js" },

3、执行npm link (如果没有权限,执行sudo npm link)

4、测试

5、发布 npm publish (如果未登录需先 npm login登录)

6、发布完毕,需npm unlink解除本地的命令映射

npm install -g XXX

总结

以上所述是小编给大家介绍的node.js命令行教程图文详解,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

您可能感兴趣的文章:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/6ae146002c29eb89c9d73134a1f8aa6e.html