前置技能

  • 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模块发布及命令行程序开发的更多相关文章

  1. Node.js 命令行程序开发资料

    Node.js 命令行程序开发教程http://www.ruanyifeng.com/blog/2015/05/command-line-with-node.html用Node.js创建命令行工具ht ...

  2. Node.js 命令行程序开发教程

    nodejs开发命令行程序非常方便,具体操作方式查看下面几篇文章 http://www.ruanyifeng.com/blog/2015/05/command-line-with-node.html ...

  3. Node.js 命令行程序开发教程 ---------http://www.ruanyifeng.com/blog/2015/05/command-line-with-node.html

    五.yargs 模块 shelljs 只解决了如何调用 shell 命令,而 yargs 模块能够解决如何处理命令行参数.它也需要安装. $ npm install --save yargs yarg ...

  4. Node: 开发命令行程序

    CLI 的全称是 Command-line Interface (命令行界面),即在命令行接受用户的键盘输入并作出响应和执行的程序. 在 Node.js 中,全局安装的包一般都具有命令行界面的功能,例 ...

  5. APICloud提供适用于命令行的开发工具,开发更具极客精神!

    APICloud近期大动作不断,上周刚刚支持Atom编辑器,并推出核心开发工具库.本周又为开发者提供了一款超轻便的新开发工具--CLI工具! 操作系统: Mac/Windows/Linux nodej ...

  6. dotnet 使用 System.CommandLine 写命令行程序

    在写命令行程序的时候,会遇到命令行解析的问题,以及参数的使用和规范化等坑.现在社区开源了命令行项目,可以帮助小伙伴快速开发命令行程序,支持自动的命令行解析和规范的参数 我写过一篇关于命令行解析的博客C ...

  7. 命令行程序增加 GUI 外壳

    Conmajia © 2012 Updated on Feb. 21, 2018 命令行大家都用过: 图 1 命令行程序工作界面 现在想办法为它做一个 GUI 外壳,实际效果参考图 2. 图 2 带 ...

  8. myapp——自动生成小学四则运算题目的命令行程序(侯国鑫 谢嘉帆)

    1.Github项目地址 https://github.com/baiyexing/myapp.git 2.功能要求 题目:实现一个自动生成小学四则运算题目的命令行程序 功能(已全部实现) 使用 -n ...

  9. os模块sys模块-sys.argv命令行参数

    提供对操作系统进行调用的接口 os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径 os.chdir("dirname") 改变当前脚本工作目录:相当于s ...

随机推荐

  1. 再讲IQueryable<T>,揭开表达式树的神秘面纱

    接上篇<先说IEnumerable,我们每天用的foreach你真的懂它吗?> 最近园子里定制自己的orm那是一个风生水起,感觉不整个自己的orm都不好意思继续混博客园了(开个玩笑).那么 ...

  2. Redis/HBase/Tair比较

    KV系统对比表 对比维度 Redis Redis Cluster Medis Hbase Tair 访问模式    支持Value大小 理论上不超过1GB(建议不超过1MB) 理论上可配置(默认配置1 ...

  3. Vue-Router 页面正在加载特效

    Vue-Router 页面正在加载特效 如果你在使用 Vue.js 和 Vue-Router 开发单页面应用.因为每个页面都是一个 Vue 组件,你需要从服务器端请求数据,然后再让 Vue 引擎来渲染 ...

  4. MySQL中interactive_timeout和wait_timeout的区别

    在用mysql客户端对数据库进行操作时,打开终端窗口,如果一段时间没有操作,再次操作时,常常会报如下错误: ERROR (HY000): Lost connection to MySQL server ...

  5. spring boot 部署为jar

    前言 一直在ide中敲代码,使用命令行mvn spring-boot:run或者gradlew bootRun来运行spring boot项目.想来放到prod上面也应该很简单.然而今天试了下,各种问 ...

  6. VS2015常用快捷键总结

    生成解决方案 F6,生成项目Shift+F6 调试执行F5,终止调试执行Shift+F5 执行调试Ctrl+F5 查找下一个F3,查找上一个Shift+F3 附加到进程Ctrl+Alt+P,逐过程F1 ...

  7. sqlyog导出json数据格式支持mysql数据转存mongodb

    <!-------------知识的力量是无限的(当然肯定还有更简单的方法)-----------!> 当我考虑将省市区三级联动数据从mysql转入mongodb时遇到了网上无直接插入mo ...

  8. 如何开发FineReport的自定义控件?

    FineReport作为插件化开发的报表软件,有些特殊需求的功能需要自己开发,开发的插件包帆软官方有提提供,可以去帆软论坛上找,本文将主要介绍如何开发一个自定义控件,这里讲讲方法论. 第一步:实例化一 ...

  9. Linux测试环境搭建的学习建议

    随着Linux应用的扩展许多朋友开始接触Linux,根据学习Windwos的经验往往有一些茫然的感觉:不知从何处开始学起.这里介绍学习Linux测试环境搭建的一些建议. 一.Linux测试环境搭建从基 ...

  10. javascript运动学教程

    本文系笔者学习原生javascript动效的笔记.内容基于某非著名培训机构的视频教程.并重新做了归类整理.删除了一些过时的内容.并重做了GIF图,加上了自己的一些分析. 一. 运动学基础 引子:从左到 ...