前置技能

  • 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. EntityFramework Core Raw SQL

    前言 本节我们来讲讲EF Core中的原始查询,目前在项目中对于简单的查询直接通过EF就可以解决,但是涉及到多表查询时为了一步到位就采用了原始查询的方式进行.下面我们一起来看看. EntityFram ...

  2. 告别被拒,如何提升iOS审核通过率(上篇)

    iOS审核一直是每款移动产品上架苹果商店时面对的一座大山,每次提审都像是一次漫长而又悲壮的旅行,经常被苹果拒之门外,无比煎熬.那么问题来了,我们有没有什么办法准确把握苹果审核准则,从而提升审核的通过率 ...

  3. ASP.NET Core MVC/WebAPi 模型绑定探索

    前言 相信一直关注我的园友都知道,我写的博文都没有特别枯燥理论性的东西,主要是当每开启一门新的技术之旅时,刚开始就直接去看底层实现原理,第一会感觉索然无味,第二也不明白到底为何要这样做,所以只有当你用 ...

  4. javascript中的this与函数讲解

    前言 javascript中没有块级作用域(es6以前),javascript中作用域分为函数作用域和全局作用域.并且,大家可以认为全局作用域其实就是Window函数的函数作用域,我们编写的js代码, ...

  5. EditText 基本用法

    title: EditText 基本用法 tags: EditText,编辑框,输入框 --- EditText介绍: EditText 在开发中也是经常用到的控件,也是一个比较必要的组件,可以说它是 ...

  6. spring boot 部署为jar

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

  7. 用MongoDB分析合肥餐饮业

    看了<从数据角度解析福州美食>后难免心痒,动了要分析合肥餐饮业的念头,因此特地写了Node.js爬虫爬取了合肥的大众点评数据.分析数据库我并没有采用MySQL而是用的MongoDB,是因为 ...

  8. YII 2.x 模板文件的 beginBlock、beginContent、beginCache

    echo '-----------beginBlock--------------------- <br />'; $this->beginBlock('block1', false ...

  9. iOS开发 适配iOS10

    2016年9月7日,苹果发布iOS 10.2016年9月14日,全新的操作系统iOS 10将正式上线. 作为开发者,如何适配iOS10呢? 1.Notification(通知) 自从Notificat ...

  10. mysql 5.7中的用户权限分配相关解读!

    这篇文章主要介绍了MySQL中基本的用户和权限管理方法,包括各个权限所能操作的事务以及操作权限的一些常用命令语句,是MySQL入门学习中的基础知识,需要的朋友可以参考下 一.简介 各大帖子及文章都会讲 ...