NodeJS 模块开发及发布详解分享


Posted in NodeJs onMarch 07, 2012

比如前两天我需要使用hmac和sha1来做签名,就没有找到一个比较好用的模块,这时候就需要我们自己来实现相应的功能了。自己写完之后,再把它打包成一个模块分享给大家来用,即方便了其他人,又能让自己有点小小的成就感,实在是一件一举多得的好事情。接下来,我就为大家介绍一下如何封装一个NodeJS模块并把它分享给其他人。

NPM (Node Package Manager, http://npmjs.org ) 是 NodeJS 的模块管理软件,除 NodeJS 内置的核心模块外,其他模块的安装、卸载等管理操作都要通过 NPM 来进行,我们自己写的模块,就要发布到NPM上来供其他人使用。

接下来,我们做一个非常简单的模块 “hello”,这个模块的功能只有一个:提供一个参数 “name” ,它在控制台输出 “Hello name”。在开始之前,我们首先要把node和npm装好,安装方法在其官方网站都有介绍,这里就不再多说了。

首先,我们创建一个名为”hello”的目录,作为模块的主目录。进入该目录,开始我们的工作。

然后,写模块的核心代码,很简单,只有以下三行:

exports.Hello = function ( name ) { 
console.log( "Hello " + name ); 
}

把它保存为 hello.js。

NodeJS每个扩展模块中都有一个package.json文件,用来描述模块的一些基本属性,比如模块名称、作者、版本号等等。关于package.json写法的详细说明,可以使用 “npm help json” 命令来查看。

我们可以在模块主目录下执行 npm init 来生成一个最基本的package.json。按照命令的提示依次输入信息即可。以下是在 hello 目录下执行 npm init 并填入相关信息后的结果:

$ npm init 
Package name: (hello) //模块名字,npm init会自动取当前目录名作为默认名字,这里不需要改,直接确认即可 
Description: A example for write a module //模块说明 
Package version: (0.0.0) 0.0.1 //模块版本号,这个大家按自己习惯来定就可以 
Project homepage: (none) //模块的主页,如果有的话可以填在这里,也可以不填 
Project git repository: (none) //模块的git仓库,选填。npm的用户一般都使用github做为自己的git仓库 
Author name: Elmer Zhang //模块作者名字 
Author email: (none) freeboy6716@gmail.com //模块作者邮箱 
Author url: (none) http://www.elmerzhang.com //模块作者URL 
Main module/entry point: (none) hello.js //模块的入口文件,我们这里是hello.js 
Test command: (none) //测试脚本,选填 
What versions of node does it run on? (~v0.5.7) * //依赖的node版本号,我们这个脚本可以运行在任何版本的node上,因此填 * 
About to write to /home/elmer/hello/package.json 
// 以下是生成的package.json文件内容预览 
{ 
"author": "Elmer Zhang <freeboy6716@gmail.com> (http://www.elmerzhang.com)", 
"name": "hello", 
"description": "A example for write a module", 
"version": "0.0.1", 
"repository": { 
"url": "" 
}, 
"main": "hello.js", 
"engines": { 
"node": "*" 
}, 
"dependencies": {}, 
"devDependencies": {} 
} 
Is this ok? (yes) //对以上内容确认无误后,就可以直接回车确认了

到此为止,我们这个模块就写完了。这时hello目录下应该有两个文件:hello.js和package.json。

我们可以返回到hello的上级目录,来测试安装一下这个模块:

$ npm install hello/ 
hello@0.0.1 ./node_modules/hello

显示安装成功。简单的测试一下:
$ node 
> var Hello = require('hello').Hello; 
> Hello('world');

Hello world正确输出了”Hello world”。

接下来我们把它发布到NPM上。

首先,我们需要有一个NPM帐号,可以使用npm adduser来注册一个:

$ npm adduser 
Username: elmerzhang 
Password: 
Email: freeboy6716@gmail.com

简单三步,一个NPM用户注册成功。

最后回到 hello 根目录,执行一下npm publish,如果没有任何错误提示,那么就发布成功了。去 http://search.npmjs.org/上看一下吧,你的模块应该已经显示在”Latest Updates”一栏里了。

至此,一个NodeJS模块成功发布到NPM,以后就可以在任何能访问npm库的地方通过npm install来安装你的模块了。

NodeJs 相关文章推荐
NodeJS学习笔记之(Url,QueryString,Path)模块
Jan 13 NodeJs
NodeJS中利用Promise来封装异步函数
Feb 25 NodeJs
PHP和NodeJs开发的应用如何共用Session
Apr 16 NodeJs
nodejs实现bigpipe异步加载页面方案
Jan 26 NodeJs
NodeJs的优势和适合开发的程序
Aug 14 NodeJs
利用nodejs监控文件变化并使用sftp上传到服务器
Feb 18 NodeJs
详解NodeJS框架express的路径映射(路由)功能及控制
Mar 24 NodeJs
nodejs使用express创建一个简单web应用
Mar 31 NodeJs
NodeJs通过async/await处理异步的方法
Oct 09 NodeJs
详解NODEJS的http实现
Jan 04 NodeJs
nodejs 最新版安装npm 的使用详解
Jan 18 NodeJs
一文秒懂nodejs中的异步编程
Jan 28 NodeJs
golang、python、php、c++、c、java、Nodejs性能对比
Mar 12 #NodeJs
PHPStorm 2020.1 调试 Nodejs的多种方法详解
Sep 17 #NodeJs
nodejs实用示例 缩址还原
Dec 28 #NodeJs
nodejs 后缀名判断限制代码
Mar 31 #NodeJs
NodeJS框架Express的模板视图机制分析
Jul 19 #NodeJs
用nodejs访问ActiveX对象,以操作Access数据库为例。
Dec 15 #NodeJs
nodejs入门详解(多篇文章结合)
Mar 07 #NodeJs
You might like
PHP 字符串加密函数(在指定时间内加密还原字符串,超时无法还原)
2010/04/28 PHP
php session安全问题分析
2011/06/24 PHP
php类中private属性继承问题分析
2012/11/01 PHP
基于PHP常用字符串的总结(待续)
2013/06/07 PHP
destoon切换城市后实现logo旁边显示地区名称的方法
2014/08/21 PHP
高质量PHP代码的50个实用技巧必备(上)
2016/01/22 PHP
Smarty模板常见的简单应用分析
2016/11/15 PHP
laravel框架语言包拓展实现方法分析
2019/11/22 PHP
msn上的tab功能Firefox对childNodes处理的一个BUG
2008/01/21 Javascript
javascript 基础篇1 什么是js 建立第一个js程序
2012/03/14 Javascript
Javascript基础教程之比较操作符
2015/01/18 Javascript
浅谈JavaScript 的执行顺序
2015/08/07 Javascript
JS判断当前页面是否在微信浏览器打开的方法
2015/12/08 Javascript
jQuery插件HighCharts绘制2D柱状图、折线图的组合双轴图效果示例【附demo源码下载】
2017/03/09 Javascript
jQuery Layer弹出层传值到父页面的实现代码
2017/08/17 jQuery
jQuery实现每隔一段时间自动更换样式的方法分析
2018/05/03 jQuery
微信小程序学习笔记之目录结构、基本配置图文详解
2019/03/28 Javascript
vue 翻页组件vue-flip-page效果
2020/02/05 Javascript
javascript中contains是否包含功能实现代码(扩展字符、数组、dom)
2020/04/07 Javascript
解决vant-UI库修改样式无效的问题
2020/11/03 Javascript
[07:09]2014DOTA2国际邀请赛-Newbee再次发威成功晋级决赛
2014/07/19 DOTA
[22:07]DOTA2-DPC中国联赛 正赛 iG vs Magma 选手采访
2021/03/11 DOTA
Python调用系统底层API播放wav文件的方法
2017/08/11 Python
python实现二分查找算法
2017/09/21 Python
一些Centos Python 生产环境的部署命令(推荐)
2018/05/07 Python
python opencv对图像进行旋转且不裁剪图片的实现方法
2019/07/09 Python
Django配置Bootstrap, js实现过程详解
2020/10/13 Python
HTML5本地存储之Web Storage详解
2016/07/04 HTML / CSS
澳洲的服装老品牌:SABA
2018/02/06 全球购物
广州喜创信息技术有限公司JAVA软件工程师笔试题
2012/10/17 面试题
超市端午节活动方案
2014/01/23 职场文书
小组名称和口号
2014/06/09 职场文书
依法行政工作汇报
2014/10/28 职场文书
2014年留守儿童工作总结
2014/12/10 职场文书
大学学生个人总结
2015/02/15 职场文书
2015年教研员工作总结
2015/05/26 职场文书