Nodejs 如何制作命令行工具
# 全局安装,安装报错是需要前面加上sudo
$ sudo npm install -g xxxb # 输出帮助
$ xxxb -h
Usage: xxxb 这里是我私人玩耍的命令哦![options] <package> Commands: resume|rs [options] [cmd] 这里是我的简历详情! Options: -h, --help output usage information
-V, --version output the version number # 输出子命令帮助
$ xxxb rs -h Usage: resume|rs [options] [cmd] 这里是我的简历详情! Options: -h, --help output usage information
-b, --basicinfo [type] 基本信息
-e, --education [type] 教育经历 basicinfo 说明: preview 预览简历 -b, --basicinfo 基本信息
name : 名字
height : 身高
dateOfBirth : 出生日期
workExperience : 工作经验
mobile : 手机号码
telephone : 电话号码
email : 邮箱地址
residency : 居住地点
currentSituation : 现状
currentCity : 当前城市
nation : 国家
region : 地区
postalCode : 邮编地址
ID : 身份证ID
website : 个人网赚
maritalStatus : 婚姻状况
politicalStatus : 政治面貌
-e, --education 教育经历
在使用 Nodejs 过程中,有很多包都支持全局安装,提供一个命令,然后在命令行我们就可以完成一些任务。有时候我们也需要开发这样的命令工具。在Node.js 中发现弄个命令行工具特别轻松,我来学习如何使用 Node.js 生成自己的command命令,在未来的项目中方便自己。
先弄个小实例感受一下命令行的魅力
再用命令行实现输出自己的简历(我觉得这个可能很有趣)
常用的命令加入进来
ls 查看当前目录
ls -a 包括隐藏文件
打开当前目录
就先这么计划着吧。
小实例
开始编写之前需要确认的一件事情是你已经安装了Node.js。你可以在命令行中运行 which node 来确认是否已经安装,或者运行 node -v 查看 node 的版本 。如果你已经安装了node,你可以看到类似于下面的输出结果,一般情况安装了node.js 顺带npm工具自动安装了。
$ which node
/usr/local/bin/node $ node -v
v4.3.1
创建目录
首先任意创建一个文件夹,初始化 package.json 文件,在该文件夹下创建bin目录:
$ mkdir xxxb #创建一个文件夹
$ cd xxxb && mkdir bin
$ npm init #初始化 'package.json' 文件
编写命令行
cd到 bin 目录下,新建一个 xxxb.js 文件(名字自取),编写如下代码,在js文件顶部加上 #!/usr/bin/env node 这段代码:
#!/usr/bin/env node
var fs = require("fs"),
path = process.cwd(); var run= function (obj) {
if(obj[0] === '-v'){
console.log('version is 1.0.0');
}else if(obj[0] === '-h'){
console.log('Useage:');
console.log(' -v --version [show version]');
}else{
fs.readdir(path, function(err, files){
if(err){
return console.log(err);
}
for(var i = 0; i < files.length; i += 1){
console.log(files[i]);
}
});
}
};
//获取除第一个命令以后的参数,使用空格拆分
run(process.argv.slice(2));
上面的 #!/usr/bin/env node 被成为 shebang(Shebang是一个由井号和叹号构成的字符串行) ,表示用后面的路径所示的程序来执行当前文件夹。还需要一个 package.json 文件
{
"name": "wcj",
"version": "1.0.0",
"description": "xxxb ---",
"repository": {
"type": "git",
"url": "xxxb"
},
"main": "index.js",
"bin": { "xxxb": "xxxb/wcj.js" },
"author": "xxxb ",
"license": "MIT"
}
运行 node bin/xxxb.js 会显示当前文件夹下的所以文件和文件夹名。这个玩意儿真的跑起来了。更多npm link的信息请查看
package.json 文件中 bin 里面的内容表示这个字段将 xxxb 命令映射到了你的 bin/xxxb.js 脚本。bin参考
此工具采用 npm版本号采用的 semver 规则
"bin": { "xxxb": "bin/xxxb.js" }
全局运行命令调试
确保你在 package.json 文件中添加了 bin 节点。然后打开命令了工具进入 xxxb 目录
install
如果在项目目录下运行没有问题,可以将当前目录模块安装到全局,也可以采用此方法来更新你的命令行工具
sudo npm install . -g
link
或者目录输入 npm link 会自动添加全局的 symbolic link ,然后就可以使用自己的命令了。
$ xxxb
#README.md
#bin
#package.json $ cmd -v
# version is 1.0.0 $ cmd -h
#Useage:
# -v --version [show version]
发布到线上
添加用户
按照提示输入用户名,密码和邮箱
npm adduser
登陆用户
按照提示输入用户名,密码和邮箱
npm login
发布
npm publish
如果不带参数,则会在当前目录下查找package.json文件,按照该文件描述信息发布;
注:
npm link 安装到全局之后,在你要使用的项目中,npm link 包的名字,你再去更改你的包,自动更新的,如果你全局安装,不在你的项目中使用,也是自动更新的,npm link 只是做了一个软链而已。它指向你包的目录。
Nodejs 如何制作命令行工具的更多相关文章
- 用 nodejs 写一个命令行工具 :创建 react 组件的命令行工具
用 nodejs 写一个命令行工具 :创建 react 组件的命令行工具 前言 上周,同事抱怨说 react 怎么不能像 angular 那样,使用命令行工具来生成一个组件.对呀,平时工作时,想要创建 ...
- python制作命令行工具——fire
python制作命令行工具--fire 前言 本篇教程的目的是希望大家可以通读完此篇之后,可以使用python制作一款符合自己需求的linux工具. 本教程使用的是google开源的python第三方 ...
- NodeJS 安装cnpm命令行工具
在安装之前,请确保已安装Git和NodeJS. cmd机内命令窗口,输入以下命令: git config --system http.sslcainfo /bin/curl-ca-bundle.crt ...
- node.js如何制作命令行工具(一)
之前使用过一些全局安装的NPM包,安装完之后,可以通过其提供的命令,完成一些任务.比如Fis3,可以通过fis3 server start 开启fis的静态文件服务,通过fis3 release开启文 ...
- Python借助argv和input()制作命令行工具
命令行执行.py文件并传递参数 代码示例如下,将参数解包 from sys import argv import requests import json import time script, us ...
- NodeJS 安装cnpm命令行工具错误问题解决
考虑问题从两个方面: 1.网速(网络太慢也是安装失败的一个原因) 2.系统用户权限(需要系统最开始使用的用管理员,新增的管理员安装会有问题) 报错问题记录于此: 实际上问题是:Windows_NT 6 ...
- node命令行工具—cf-cli
音乐分享: 钢心 - <龙王> 初喜<冠军>后喜<龙王> (PS:听一次钢心乐队的演出后采访才知道 “龙王”隐喻的是一起喝酒的老铁....) ——————————— ...
- nodejs 编写(添加时间戳)命令行工具 timestamp
Nodejs除了编写服务器端程序还可以编写命令行工具,如gulp.js就是Nodejs编写的. 接下来我们来实现一个添加时间戳的命令: $ timestamp action https://www.n ...
- GitBook是一个命令行工具(Node.js库),我们可以借用该工具使用Github/Git和Markdown来制作精美的图书,但它并不是一本关于Git的教程哟。
GitBook是一个命令行工具(Node.js库),我们可以借用该工具使用Github/Git和Markdown来制作精美的图书,但它并不是一本关于Git的教程哟. 支持输出多种格式 GitBook支 ...
随机推荐
- Unity---动画系统学习(5)---使用MatchTarget来匹配动画
1. 介绍 做好了走.跑.转弯后,我们就需要来点更加高级的动画了. 我们使用自带动画学习笔记2中的FQVault动画,来控制人物FQ. 在动画学习笔记4的基础上添加Vault动画. 添加一个参数Vau ...
- 通用动态树(Link-Cut Tree)模板
一个没有维护任何东西的动态树模板 忘了怎么写可以直接来粘 int ch[300010][2], fa[300010], st[300010]; bool lazy[300010]; bool nroo ...
- springcloud微服务总结三 服务客户端
一 springcloud服务理解: dubbo中服务注册和调用都是都过注解来进行的,dubbo中在service层中调用服务是通过将@service注解改变为dubbo代码架包中的service注解 ...
- centos下dnsmasq安装与配置
说明1.dnsmasq是一款小巧且方便地用于配置DNS服务器和DHCP服务器的工具,适用于小型网络,它提供了DNS解析功能和可选择的DHCP功能. 2.dnsmasq可以解决小范围的dns查询问题,如 ...
- HDU - 2842
要拆第n个环要求保留第n-1拆除前n-2 对于n,先拆掉n-2再去掉n再放回n-2,然后规模降为n-1 f(n)=2f(n-2)+f(n-1)+1 inline ll mod(ll a){return ...
- PIE SDK元素位置和显示样式的修改
1功能简介 在数据的处理中会出现根据需求进行元素的位置和显示样式的修改,使元素的形状,空间位置得到改变,下面将介绍基于PIE SDK的元素位置和显示样式的修改. 2功能实现说明 2.1.1 实现思路及 ...
- JSON.parse(JSON.stringify()) 实现对对象的深拷贝
JSON.parse(JSON.stringify(obj))我们一般用来深拷贝,其过程说白了 就是利用JSON.stringify 将js对象序列化(JSON字符串),再使用JSON.parse来反 ...
- 使用windows的BitLocker+VHD加密“文件夹”
进入磁盘管理 创建VHD,选定位置 初始化创建的虚拟盘,新建简单卷 给新的盘启用BitLocker 其他: 快速锁定:manage-bde.exe D: -lock -fd
- oled屏幕配套取字模软件使用
oled屏幕配套取字模软件使用 作者:李剀 出处:https://www.cnblogs.com/kevin-nancy/p/10531368.html欢迎转载,但也请保留上面这段声明.谢谢! **P ...
- Linux getopt()函数 getopt_long()函数---转
http://hi.baidu.com/scoundrelgg/item/d4083f8412eea05d26ebd97f Linux getopt()函数 getopt_long()函数 get_o ...