十分钟通过 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操作? ...
随机推荐
- RXJS Observable的冷,热和Subject
一.Observable的冷和热 Observable 热:直播.所有的观察者,无论进来的早还是晚,看到的是同样内容的同样进度,订阅的时候得到的都是最新时刻发送的值. Observable 冷:点播. ...
- 网络远程唤醒 WOL Magic Packet
Magic Packet Magic Packet白皮书介绍: The basic technical details of Magic Packet Technologyare simple and ...
- 关于<软件>的定义
百度百科: 软件是一系列按照特定顺序组织的计算机数据和指令的集合.一般来讲软件被划分为系统软件.应用软件和介于这两者之间的中间件. 国标中的定义: 与计算机系统操作有关的计算机程序.规程.规则,以及可 ...
- vue-cli3.0安装element-ui组件及按需引入element-ui组件
在VUE-CLI 3下的第一个Element-ui项目(菜鸟专用) (https://www.cnblogs.com/xzqyun/p/10780659.html) 上面这个链接是vue-cli3.0 ...
- vue获取当前对象
<li v-for="img in willLoadImg" @click="selectImg($event)"> <img class=& ...
- MSDN i TELL YOU 又更新了,win10 1809版本的 3月29日的
MSDN i TELL YOU 又更新了,1809版本的 3月29日的 WINDOWS 10 现在只有64位的 很好,估计 64位的普及了. 是一大改变
- CF498C. Array and Operations [二分图]
CF498C. Array and Operations 题意: 给定一个长为 n 的数组,以及 m 对下标 (a, b) 且满足 a + b 为奇数,每次操作可以将同一组的两个数同时除以一个公约数 ...
- lua 语言基础
1.数据类型: string(字符串) ·运算符“+.-.*./”等操作字符串,lua会尝试讲字符串转换为数字后操作: ·字符串连接用“..”运算符 ·用“#”来计算字符串的长度(放在字符串前面) · ...
- VB生成条形码(EAN-13)
14年给别人写的一个库存软件,用到扫码枪,所以就有了这个类. 编码规则相对简单,详见百度百科EAN-13 示例运行效果如下: 类模块:cEAN13.cls Option Explicit '★━┳━━ ...
- python学习笔记(5)
.................................................................................................... ...