nodejs模块发布及命令行程序开发
前置技能
- npm工具为nodejs提供了一个模块和管理程序模块依赖的机制,当我们希望把模块贡献出去给他人使用时,可以把我们的程序发布到npm提供的公共仓库中,为了方便模块的管理,npm规定要使用一个叫package.json的文件来描述我们模块的名称、版本等信息。
- 我们贡献出去的程序模块,可能也依赖了别人所编写的模块,所以需要在package.json中写明我们依赖了哪些模块,便于别人安装。
- 简单的nodejs程序可以通过 node xxx.js 来运行,当我们希望直接在控制台中使用xxx命令运行nodejs程序时,需要创建一个cmd命令文件(windows下),并把它放到path路径下,npm提供了一个自动完成这个工作的流程,这个也是在package.json里边配置的。
基于以上几点,我觉得有必要挨个理解一下package.json里边的配置项:我理解翻译的package.json文档
模块发布
发布一个npm模块非常简单。
注册npm账户
这个账户注册体验多好啊,不过记得密码别搞忘记了。
npm adduser
Username: zoucz
Password: ******
Email: 405966530@qq.com
创建一个测试模块
新建一个文件夹,npm init,一路enter ,要注意的是name不能是已经被别人抢占的,可以到http://npmjs.org这里查询。
此时文件夹下会生成一个package.json文件,如果看过package.json里边配置的含义,这里就比较好理解了。
新建一个index.js,内容如下:

此时模块就创建完毕了,简单吧!
发布模块
在刚刚新建的文件夹下打开cmd,运行npm publish ,模块发布完毕!
要注意的是每次发布的时候都需要增加版本号。
此时在http://npmjs.org这里就可以查询到刚刚发布的模块了,我测试模块名称是zoucz,那么此时别人也可以通过 npm install zoucz来使用我发布的模块了。
开发控制台命令程序
以windows下为例,我们怎么样才能创建一个cmd命令呢?
1.在环境变量里边添加一段:";D:/test"
2.在d盘test目录下创建一个mycmd.cmd文件
这时就可以使用mycmd命令了。那么要怎么在cmd中调用node程序呢? 很简单:
3.在那个mycmd.cmd文件里边写上 node path/to/xxx.js,就可以了。
使用npm创建控制台命令程序,我们不需要自己完成上面的步骤,只需要增加一行配置就可以了
添加要执行的nodejs代码文件
在模块根目录下添加bin目录

新建zoucz.js内容如下:
#!/usr/bin/env node
var util=require("util");
console.log("hello,i'm zouchegnzhuo,you can type command name/site/email");
var cmd=process.argv[2];
if(cmd){
switch(cmd){
case "name":
console.log("邹成卓");
break;
case "site":
console.log("http://zoucz.com");
break;
case "email":
console.log("405966530@qq.com");
break;
}
}
要注意的是,文件首行的 #!/usr/bin/env node 一定要添加 ,这一行的意思是生成cmd文件的时候用什么路径的什么程序来运行上面的代码,文章末尾的demo中给出了不加的后果。
在package.json中配置bin
在package.json中配置

模块在npm install的时候会生成zoucz和zoucz_err两个cmd文件。
发布模块
添加好上面的配置后,发布模块,别的码农就可以安装使用此命令了。
安装使用控制台命令程序
在cmd中 npm install -g zoucz ,就可以安装上面的模块,安装完成后可以使用zoucz命令和zoucz_err命令。

zoucz_err是没有在js文件首行写#!/usr/bin/env node的后果:

运行命令之后:

我们顺着图片中的路径,在C:\Users\czzou\AppData\Roaming\npm目录下可以找到npm为我们创建的cmd文件路径:

可以看到npm创建cmd文件的同时也创建了linux下使用的文件。
现在来看一下为什么执行zoucz_err会报错,分别打开两个cmd文件:
zoucz.cmd

zoucz_err.cmd

后者压根就没有用node去执行那段代码,当然会报错了~
这里要注意的是npm install -g 全局安装的时候,cmd文件是被创建在上面的路径下的,如果没有-g选项,局部安装,则会被创建在项目根目录node_modules/.bin 目录下。
最后
npm可以帮我们做很多事情,做node开发的同学们都有必要花时间慢慢把npm的文档啃完https://docs.npmjs.com
本文所使用的demo地址:https://github.com/zouchengzhuo/nodejsLearn/tree/master/zoucz
本文转自我的个人网站,原文地址,欢迎前往交流讨论
nodejs模块发布及命令行程序开发的更多相关文章
- Node.js 命令行程序开发资料
Node.js 命令行程序开发教程http://www.ruanyifeng.com/blog/2015/05/command-line-with-node.html用Node.js创建命令行工具ht ...
- Node.js 命令行程序开发教程
nodejs开发命令行程序非常方便,具体操作方式查看下面几篇文章 http://www.ruanyifeng.com/blog/2015/05/command-line-with-node.html ...
- Node.js 命令行程序开发教程 ---------http://www.ruanyifeng.com/blog/2015/05/command-line-with-node.html
五.yargs 模块 shelljs 只解决了如何调用 shell 命令,而 yargs 模块能够解决如何处理命令行参数.它也需要安装. $ npm install --save yargs yarg ...
- Node: 开发命令行程序
CLI 的全称是 Command-line Interface (命令行界面),即在命令行接受用户的键盘输入并作出响应和执行的程序. 在 Node.js 中,全局安装的包一般都具有命令行界面的功能,例 ...
- APICloud提供适用于命令行的开发工具,开发更具极客精神!
APICloud近期大动作不断,上周刚刚支持Atom编辑器,并推出核心开发工具库.本周又为开发者提供了一款超轻便的新开发工具--CLI工具! 操作系统: Mac/Windows/Linux nodej ...
- dotnet 使用 System.CommandLine 写命令行程序
在写命令行程序的时候,会遇到命令行解析的问题,以及参数的使用和规范化等坑.现在社区开源了命令行项目,可以帮助小伙伴快速开发命令行程序,支持自动的命令行解析和规范的参数 我写过一篇关于命令行解析的博客C ...
- 命令行程序增加 GUI 外壳
Conmajia © 2012 Updated on Feb. 21, 2018 命令行大家都用过: 图 1 命令行程序工作界面 现在想办法为它做一个 GUI 外壳,实际效果参考图 2. 图 2 带 ...
- myapp——自动生成小学四则运算题目的命令行程序(侯国鑫 谢嘉帆)
1.Github项目地址 https://github.com/baiyexing/myapp.git 2.功能要求 题目:实现一个自动生成小学四则运算题目的命令行程序 功能(已全部实现) 使用 -n ...
- os模块sys模块-sys.argv命令行参数
提供对操作系统进行调用的接口 os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径 os.chdir("dirname") 改变当前脚本工作目录:相当于s ...
随机推荐
- 你知道C#中的Lambda表达式的演化过程吗?
那得从很久很久以前说起了,记得那个时候... 懵懂的记得从前有个叫委托的东西是那么的高深难懂. 委托的使用 例一: 什么是委托? 个人理解:用来传递方法的类型.(用来传递数字的类型有int.float ...
- [C#] 简单的 Helper 封装 -- RandomHelper
using System; namespace Wen.Helpers { /// <summary> /// 随机数助手 /// </summary> public seal ...
- ASP.NET加密和解密数据库连接字符串
大家知道,在应用程序中进行数据库操作需要连接字符串,而如果没有连接字符串,我们就无法在应用程序中完成检索数据,创建数据等一系列的数据库操作.当有人想要获取你程序中的数据库信息,他首先看到的可能会是We ...
- 玩转spring boot——MVC应用
如何快速搭建一个MCV程序? 参照spring官方例子:https://spring.io/guides/gs/serving-web-content/ 一.spring mvc结合thymeleaf ...
- 开发者的利器:Docker 理解与使用
困扰写代码的机器难免会被我们安装上各种各样的开发工具.语言运行环境和引用库等一大堆的东西,长久以来不仅机器乱七八糟,而且有些相同的软件还有可能会安装不同的版本,这样又会导致一个项目正常运行了,却不小心 ...
- FullCalendar应用——整合农历节气和节日
FullCalendar用来做日程管理功能非常强大,但是唯一不足的地方是没有将中国农历历法加进去,今天我将结合实例和大家分享如何将中国农历中的节气和节日整合到FullCalendar中,从而增强其实用 ...
- Android—应用程序开机自启
android开机时候会发送开机广播,我们想要收到广播知道手机开机,才能启动我们的应用程序. 首先要在配置文件中添加相应权限: <uses-permission android:name=&qu ...
- 自建git node pm2 (不赘述,就说遇见的问题)
//======================[git]部分 主题部分还是按照网上的办法进行安装. 安装的话 分为两个办法(一个是yum (contos办法) 或者sudo(ubuntu办法) ...
- (一)Spark简介-Java&Python版Spark
Spark简介 视频教程: 1.优酷 2.YouTube 简介: Spark是加州大学伯克利分校AMP实验室,开发的通用内存并行计算框架.Spark在2013年6月进入Apache成为孵化项目,8个月 ...
- Linux实战教学笔记06:Linux系统基础优化
第六节 Linux系统基础优化 标签(空格分隔):Linux实战教学笔记-陈思齐 第1章 基础环境 第2章 使用网易163镜像做yum源 默认国外的yum源速度很慢,所以换成国内的. 第一步:先备份 ...