十分钟通过 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 来查看帮助。
一个命令行工具就创建成功啦~~
十分钟通过 NPM 创建一个命令行工具的更多相关文章
- 用 nodejs 写一个命令行工具 :创建 react 组件的命令行工具
用 nodejs 写一个命令行工具 :创建 react 组件的命令行工具 前言 上周,同事抱怨说 react 怎么不能像 angular 那样,使用命令行工具来生成一个组件.对呀,平时工作时,想要创建 ...
- GitBook是一个命令行工具(Node.js库),我们可以借用该工具使用Github/Git和Markdown来制作精美的图书,但它并不是一本关于Git的教程哟。
GitBook是一个命令行工具(Node.js库),我们可以借用该工具使用Github/Git和Markdown来制作精美的图书,但它并不是一本关于Git的教程哟. 支持输出多种格式 GitBook支 ...
- 显示器 Linux 性能 18 (一个命令行工具传递)
对于系统和网络管理员来说每天监控和调试Linux系统的性能问题是一项繁重的工作.在IT领域作为一名Linux系统的管理员工作5年后,我逐渐认识到监控和保持系统启动并执行是多么的不easy.基于此原因. ...
- 【amad】cookiecutter -- 一个命令行工具,使用项目模版来构建项目
动机 简介 个人评分 动机 一般的框架都有脚手架工具,但是并不会让所有人满意. 简介 cookiecutter1是一个Python实现的命令行工具,可以通过项目模版来构建项目. 它的特性包括: 跨平台 ...
- 如何用node编写命令行工具,附上一个ginit示例,并推荐好用的命令行工具
原文 手把手教你写一个 Node.js CLI 强大的 Node.js 除了能写传统的 Web 应用,其实还有更广泛的用途.微服务.REST API.各种工具……甚至还能开发物联网和桌面应用.Java ...
- 如何用Node编写命令行工具
0. 命令行工具 当全局安装模块之后,我们可以在控制台下执行指定的命令来运行操作,如果npm一样.我把这样的模块称之为命令行工具模块(如理解有偏颇,欢迎指正) 1.用Node编写命令行工具 在Node ...
- Orchard中的命令行工具
在Orchard中提供了一个命令行工具,我们可以使用这个命令行工具创建用户.创建博客.生成代码.配置网站.打包模块等.并且这个命令行工具是可以扩充的,只要我们在自己开发的模块中创建一个Command类 ...
- Apache Commons CLI 开发命令行工具示例
概念说明Apache Commons CLI 简介 虽然各种人机交互技术飞速发展,但最传统的命令行模式依然被广泛应用于各个领域:从编译代码到系统管理,命令行因其简洁高效而备受宠爱.各种工具和系统都 提 ...
- [原创]使用命令行工具提升cocos2d-x开发效率(二)之CocosBuilder篇
如果你正在使用CocosBuilder或者是其他基于CocosBuilder源码改装而成的工具为你的游戏搭建场景或者UI,那你一定要看看这篇文章:) 你是否已经厌倦了无聊的手工publish操作? ...
随机推荐
- Docker使用Dockerfile构建Asp.Net Core镜像
FROM microsoft/dotnet:2.2-aspnetcore-runtime AS base WORKDIR /app EXPOSE 80 FROM microsoft/dotnet:2. ...
- PHP7.* AES的加密解密
之前写过一篇: PHP AES的加密解密-----[弃用] 使用的是php5.*之前的mcrypt_decrypt 函数,该函数已经在php7.1后弃用了,上马的是openssl的openssl_en ...
- css边框动画
<div class="button">hover me to change</div> .button{ width:200px; height:60px ...
- UOJ#346. 【清华集训2017】某位歌姬的故事 动态规划
原文链接www.cnblogs.com/zhouzhendong/p/UOJ346.html 题解 首先按照 $m_i$ 的大小排个序. 如果某一个区间和一个 m 值比他小的区间有交,那么显然可以将这 ...
- 打包ideaUI本地项目,以供本地使用
#首先我们要在本机进行一些配置 在本机配置环境变量(控制面板->高级系统设置->环境变量->) #用cmd检测是否配置成功 如果你在ideaUI里,配置好了之后.我们现在来打架包 # ...
- python tesserocr ImportError: dll loading failed 一个不常遇见的错误,以及简单的python安装方法~
废话不多说了,这是写给小白的了. 本人有c#,c/c++开发经验,最近因为偶然的原因,开始接触python,遇到一个棘手的问题,一位朋友在安装tesserocr 包后遇到一个错误,重新安装数次不能解决 ...
- Python3-Cookbook总结 - 第二章:字符串和文本
第二章:字符串和文本 几乎所有有用的程序都会涉及到某些文本处理,不管是解析数据还是产生输出. 这一章将重点关注文本的操作处理,比如提取字符串,搜索,替换以及解析等. 大部分的问题都能简单的调用字符串的 ...
- mongo删除指定字段,可多个字段同时删除
参考代码: db.getCollection('Person').update({"email":{$exists:true}},{$unset:{"email" ...
- DWM1000 定位操作流程--[蓝点无限]
蓝点DWM1000 模块已经打样测试完毕,有兴趣的可以申请购买了,更多信息参见 蓝点论坛 1烧录HEX文件 使用ST-LINK utility 烧录HEX文件,分别烧录三个基站以及一个标签,烧录基站时 ...
- Python面向对象编程指南
Python面向对象编程指南(高清版)PDF 百度网盘 链接:https://pan.baidu.com/s/1SbD4gum4yGcUruH9icTPCQ 提取码:fzk5 复制这段内容后打开百度网 ...