大过年的,要不要写点代码压压惊?来花十分钟学一下怎么通过 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 来查看帮助。

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

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

  1. 用 nodejs 写一个命令行工具 :创建 react 组件的命令行工具

    用 nodejs 写一个命令行工具 :创建 react 组件的命令行工具 前言 上周,同事抱怨说 react 怎么不能像 angular 那样,使用命令行工具来生成一个组件.对呀,平时工作时,想要创建 ...

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

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

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

    对于系统和网络管理员来说每天监控和调试Linux系统的性能问题是一项繁重的工作.在IT领域作为一名Linux系统的管理员工作5年后,我逐渐认识到监控和保持系统启动并执行是多么的不easy.基于此原因. ...

  4. 【amad】cookiecutter -- 一个命令行工具,使用项目模版来构建项目

    动机 简介 个人评分 动机 一般的框架都有脚手架工具,但是并不会让所有人满意. 简介 cookiecutter1是一个Python实现的命令行工具,可以通过项目模版来构建项目. 它的特性包括: 跨平台 ...

  5. 如何用node编写命令行工具,附上一个ginit示例,并推荐好用的命令行工具

    原文 手把手教你写一个 Node.js CLI 强大的 Node.js 除了能写传统的 Web 应用,其实还有更广泛的用途.微服务.REST API.各种工具……甚至还能开发物联网和桌面应用.Java ...

  6. 如何用Node编写命令行工具

    0. 命令行工具 当全局安装模块之后,我们可以在控制台下执行指定的命令来运行操作,如果npm一样.我把这样的模块称之为命令行工具模块(如理解有偏颇,欢迎指正) 1.用Node编写命令行工具 在Node ...

  7. Orchard中的命令行工具

    在Orchard中提供了一个命令行工具,我们可以使用这个命令行工具创建用户.创建博客.生成代码.配置网站.打包模块等.并且这个命令行工具是可以扩充的,只要我们在自己开发的模块中创建一个Command类 ...

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

    概念说明Apache Commons CLI 简介 虽然各种人机交互技术飞速发展,但最传统的命令行模式依然被广泛应用于各个领域:从编译代码到系统管理,命令行因其简洁高效而备受宠爱.各种工具和系统都 提 ...

  9. [原创]使用命令行工具提升cocos2d-x开发效率(二)之CocosBuilder篇

    如果你正在使用CocosBuilder或者是其他基于CocosBuilder源码改装而成的工具为你的游戏搭建场景或者UI,那你一定要看看这篇文章:)   你是否已经厌倦了无聊的手工publish操作? ...

随机推荐

  1. ImCash:论拥有靠谱数字钱包的重要性!

    数字货币被盗已经不是什么新鲜事,前有交易所币安被黑客攻击,Youbit破产,后有“钓鱼邮件“盗号木马,安全对于数字货币用户来讲至关重要. 现行市场痛点:   2017年9月以太坊Parity钱包的漏洞 ...

  2. java位移运算符3 转

    https://www.cnblogs.com/winsker/p/6728672.html 移位运算符操作的对象就是二进制的位,可以单独用移位运算符来处理int型整数. 理解java移位运算符 运算 ...

  3. url.cn短网址批量缩短开发接口

    https://www.showapi.com/api/view/1728 //md5签名方式--非简单签名 <?php header("Content-Type:text/html; ...

  4. 【C语言编程练习】5.10寻找水仙数

    1. 题目要求 如果一个3位数等于各位数字的立方和,则称这个数为水仙数,例如407=4^3+0^3+7^3.编写一个程序,找出全部的水仙数 2. 题目分析 感觉又和之前的题目大同小异了,先找出解空间, ...

  5. may be a diary?

    [About Me] SD某弱校高二的OIer. qq 995681518,欢迎一起交流~ 喵喵喵喵喵 "当你想要颓废的那一刻,想一想当初为什么走到了这里." 以下文字充满负面情绪 ...

  6. Spring boot 处理 error 的套路

    Spring boot 处理 error 的基本流程: Controller -> 发生错误 -> BasicErrorController -> 根据 @RequestMappin ...

  7. 【原创】XAF Winfrom 支持4K分辨率

    Program.cs 添加以下代码 [STAThread] static void Main() { //支持4K显示 DevExpress.XtraEditors.WindowsFormsSetti ...

  8. python爬虫第四天

        昨天学到了正则表达式基础知识 :原子 今天开始学习第二个基础知识:元字符 元字符     就是正则表达式中含有特殊含义的一些字符 常见的元字符及含义   符号 含义 . 匹配除换行符以外 的任 ...

  9. Hadoop集群搭建-full完全分布式(三)

    环境:Hadoop-2.8.5 .centos7.jdk1.8 一.步骤 1).4台centos虚拟机 2). 将hadoop配置修改为完全分布式 3). 启动完全分布式集群 4). 在完全分布式集群 ...

  10. 在IIS上新发布的网站,样式与js资源文件加载不到(资源文件和网页同一个域名下)

    在IIS上新发布的网站,网站能打开,但样式与js资源文件加载不到(资源文件和网页是同一个域名下,例如:网页www.xxx.com/index.aspx,图片www.xxx.com/pic.png). ...