十分钟通过 NPM 创建一个命令行工具

大过年的,要不要写点代码压压惊?来花十分钟学一下怎么通过 NPM 构建一个命令行工具。

写了一个小 demo,用于代替 touch 的创建文件命令 touchme ,可以创建自带“佛祖保佑”注释的文件。效果如下:

命令可以带有一个参数,选择注释的符号

现在,开始撸代码 ~

首先创建一个文件夹,我起名字 create-file-cli 然后通过 npm init 命令创建 package.json 文件。

$ mkdir create-file-cli
$ cd create-file-cli
$ npm init -y

然后修改 package.json 添加一个 bin 字段,定义一个 touchme 命令,并指定该命令执行的文件。

{
  "name": "create-file-cli",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "bin": {
    "touchme": "bin/touchme.js"
  },
  "keywords": [],
  "author": "",
  "license": "ISC"
}

接下来实现 bin/touchme.js ,要用到  Commander.js -- node.js 命令行接口的完整解决方案。看不懂英文文档还有贴心的中文 README

bin/touchme.js 如下

#!/usr/bin/env node

const program = require(‘commander‘);
const gen = require(‘../lib/generate-file‘);

program
  // 版本信息
  .version(‘0.0.4‘, ‘-v, --version‘)
  // 用法说明
  .usage(‘<file ...> [options]‘)
  // 选择名 选项描述 默认值
  // 选项 可以带有一个参数 可以通过 program.copy 获取该选项信息
  // 如果没有参数 该值为 true
  .option(‘-c, --copy <source>‘, ‘copy file and add comment‘)
  .option(‘-H, --hashtag‘, `comment by ‘#‘`)
  .option(‘-s, --slash‘, `comment by ‘/‘`)
  .parse(process.argv);

function resolve(program) {
  // 没有匹配任何选项的参数会被放到数组 args 中
  const { copy, hashtag, slash, args } = program;
  if (!args.length) {
    console.log(‘Please input filename.‘);
    return;
  }
  if (copy === true) {
    console.log(‘You should copy at least one file.‘);
    return;
  }
  let type = ‘star‘;
  if (slash) type = ‘slash‘;
  if (hashtag) type = ‘hashtag‘;
  for (let i = 0; i < args.length; i++) {
    gen(args[i], copy, type);
  }
}

resolve(program);

具体 lib/generate-file.js 实现见 https://github.com/G-lory/create-file-cli/ 就是简单的创建一个文件并写入注释。

通过 option 定义命令选项并可定义参数。

通过 program 可以获取命令行输入的参数信息。

现在功能写完了,剩下的事情就是发布了。首先要到 https://www.npmjs.com 查找一下自己的包名有没有人已经发布了,如果有的话,你需要先修改包名。然后在 https://www.npmjs.com 注册一个账号。记住自己的账号密码和邮箱后,回到命令行。

$ npm login
Username: ...
Password:
Email: (this IS public)
Logged in as ... on https://registry.npmjs.org/.

注意登录成功后显示的是 https://registry.npmjs.org/ 很多同学设置了淘宝的镜像,显示的就不是这个地址,那么发布之前要改回来。

$ npm config set registry=http://registry.npmjs.org

然后就可以发布包了。

$ npm publish

如果之后有修改,更改一下 package.json 中的版本号 然后再次执行 npm publish 即可。

发布后可以去 npm 网站搜索一下自己的包。然后就是安装测试一下功能。

全局安装一下

$ npm install create-file-cli -g

然后就可以使用 touchme 命令创建文件了。也可以使用 touchme -h 来查看帮助。

一个命令行工具就创建成功啦~~

原文地址:https://www.cnblogs.com/wenruo/p/10352543.html

时间: 2024-10-10 21:06:37

十分钟通过 NPM 创建一个命令行工具的相关文章

BCP是SQL Server中负责导入导出数据的一个命令行工具

BCP是SQL Server中负责导入导出数据的一个命令行工具,它是基于DB-Library的,并且能以并行的方式高效地导入导出大批量的数据.BCP可以将数据库的表或视图直接导出,也能通过SELECT FROM语句对表或视图进行过滤后导出.在导入导出数据时,可以使用默认值或是使用一个格式文件将文件中的数据导入到数据库或将数据库中的数据导出到文件中. 下面将详细讨论如何利用BCP导入导出数据. 1. BCP的主要参数介绍 BCP共有四个动作可以选择. (1) 导入. 这个动作使用in命令完成,后面

显示器 Linux 性能 18 (一个命令行工具传递)

对于系统和网络管理员来说每天监控和调试Linux系统的性能问题是一项繁重的工作.在IT领域作为一名Linux系统的管理员工作5年后,我逐渐认识到监控和保持系统启动并执行是多么的不easy.基于此原因.我们已编写了最常使用的18个命令行工具列表,这些工具将有助于每一个Linux/Unix 系统管理员的工作.这些命令行工具能够在各种Linux系统下使用.能够用于监控和查找产生性能问题的解决办法.这个命令行工具列表提供了足够的工具.您能够挑选适用于您的监控场景的工具. 1.Top-Linux进程监控

GitBook是一个命令行工具(Node.js库),我们可以借用该工具使用Github/Git和Markdown来制作精美的图书,但它并不是一本关于Git的教程哟。

支持输出多种格式 GitBook支持输出多种文档格式,如: 静态站点:GitBook默认输出该种格式,生成的静态站点可直接托管搭载Github Pages服务上: PDF:需要安装gitbook-pdf依赖: eBook:需要安装ebook-convert: 单HTML网页:支持将内容输出为单页的HTML,不过一般用在将电子书格式转换为PDF或eBook的中间过程: JSON:一般用于电子书的调试或元数据提取. 结构简单 使用GitBook制作电子书,必备两个文件:README.md和SUMMA

用 Swift 编写的工程代码静态分析命令行工具 smck

最近几周在用 swift 做一个命令行工具 smck 用来对现有 OC 工程的代码做些分析和处理.日后工程切换成 Swift 可以加上对 Swift 工程代码的支持.昨天看到喵神在微博上说他下周要直播 live coding 一个 swift 的命令行工具,传送门: 现场编程 - 用 Swift 创建命令行工具 fengniao-cli Part1 ,其实蛮期待.想想跟喵神挺有缘的,最近下了他开发的 iOS 应用 Mail Me,随时能够记录工作和准备讲座时一些灵感,smck 的一些实现还有模块

Apache Commons CLI 开发命令行工具示例

概念说明Apache Commons CLI 简介 虽然各种人机交互技术飞速发展,但最传统的命令行模式依然被广泛应用于各个领域:从编译代码到系统管理,命令行因其简洁高效而备受宠爱.各种工具和系统都 提供了详尽的使用手册,有些还提供示例说明如何二次开发.然而关于如何开发一个易用.强壮的命令行工具的文章却很少.本文将结合 Apache Commons CLI,通过一个完整的例子展示如何准备.开发.测试一个命令行工具.希望本文对有相关需求的读者能有所帮助.      Apache Commons CL

ExtTool——ExtJS命令行工具

加速ExtJS开发的工具,虽然官方已经有了Sencha Cmd,但创建文件不是特别灵活. git地址:https://git.oschina.net/jiusem/ExtTool.git 安装 解压到D盘,形成目录: D:\ExtTool 将该地址添加到环境变量,OK,可以使用了. 使用 打开命令行,切换到项目的app目录,即ExtJS项目的MVC文件存放目录. 创建控制器: ExtTool create c App 将会创建:app/controller/AppController.js 文件

ThinkPHP命令行工具Tptool2.0使用教程

经常需要用ThinkPHP开发项目,总感觉手动创建控制器.模型.视图是一件繁琐的事情,需要不停地复制粘贴.还有当文件夹的层级很深时,来回找文件也是一件很耗时的事情. 我一直坚信:工具善其事,必先利其器.在借鉴国外的一些框架如ExtJS和Yii后,我想到了开发一个命令行工具来简化操作.基于ThinkPHP3.2开发~ 工具下载地址:https://git.oschina.net/jiusem/Tptool 安装 将项目解压到D盘下,形成的目录是D:\tptool,并将该路径添加到环境变量. 使用

ThinkPHP命令行工具Tptool

经常需要用ThinkPHP开发项目,总感觉手动创建控制器.模型.视图是一件繁琐的事情,需要不停地复制粘贴.还有当文件夹的层级很深时,来回找文件也是一件很耗时的事情. 我一直坚信:工具善其事,必先利其器.在借鉴国外的一些框架如ExtJS和Yii后,我想到了开发一个命令行工具来简化操作.基于ThinkPHP3.2开发~ 工具下载地址:http://pan.baidu.com/s/1ntyrRrb 安装 将项目解压到D盘下,形成的目录是D:\tptool,并将该路径添加到环境变量. 该项目依托于Not

MySQL 命令行工具之 mysqldump

mysqldump 是MySQL的一个命令行工具,用于逻辑备份.可以将数据库和表的结构,以及表中的数据分别导出成:create database, create table, insert into的sql语句.当然还可以导出 存储过程,触发器,函数,调度事件(events).不管是程序员,还是DBA都会经常使用的一个工具. 1. mysqldump --help mysqldump 的选项很多,我们看一下他的帮助: mysqldump Ver 10.13 Distrib 5.6.26, for