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 模块开发及发布详解分享
Mar 07 NodeJs
我的NodeJs学习小结(一)
Jul 06 NodeJs
NodeJs基本语法和类型
Feb 13 NodeJs
Windows系统中安装nodejs图文教程
Feb 28 NodeJs
nodejs加密Crypto的实例代码
Jul 07 NodeJs
nodejs的压缩文件模块archiver用法示例
Jan 18 NodeJs
深入解析nodejs HTTP服务
Jul 25 NodeJs
nodejs使用express获取get和post传值及session验证的方法
Nov 09 NodeJs
nodejs实现超简单生成二维码的方法
Mar 17 NodeJs
NodeJs之word文件生成与解析的实现代码
Apr 01 NodeJs
nodejs实现聊天机器人功能
Sep 19 NodeJs
Node.js实现爬取网站图片的示例代码
Apr 04 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模拟ping命令(php exec函数的使用方法)
2013/10/25 PHP
完善CodeIgniter在IDE中代码提示功能的方法
2014/07/19 PHP
PHP上传文件时自动分配路径的方法
2015/01/09 PHP
symfony表单与页面实现技巧
2015/01/26 PHP
深入解析WordPress中加载模板的get_template_part函数
2016/01/11 PHP
使用IE的地址栏来辅助调试Web页脚本
2007/03/08 Javascript
jQuery学习笔记 获取jQuery对象
2012/09/19 Javascript
jQuery $.extend()用法总结
2014/06/15 Javascript
JavaScript中的Promise使用详解
2015/06/24 Javascript
js阻止浏览器默认行为触发的通用方法(推荐)
2016/05/15 Javascript
JS实现兼容各种浏览器的获取选择文本的方法【测试可用】
2016/06/21 Javascript
深入浅析JS Function()构造函数
2016/08/22 Javascript
基于javascript实现按圆形排列DIV元素(二)
2016/12/02 Javascript
js代码实现下拉菜单【推荐】
2016/12/15 Javascript
BootStrap Select清除选中的状态恢复默认状态
2017/06/20 Javascript
Hexo已经看腻了,来手把手教你使用VuePress搭建个人博客
2018/04/26 Javascript
服务端预渲染之Nuxt(使用篇)
2019/04/08 Javascript
Vue触发input选取文件点击事件操作
2020/08/07 Javascript
javaScript代码飘红报错看不懂?读完这篇文章再试试
2020/08/19 Javascript
[03:12]TI9战队档案 - Virtus Pro
2019/08/20 DOTA
python命令行参数sys.argv使用示例
2014/01/28 Python
python决策树之C4.5算法详解
2017/12/20 Python
Tensorflow之构建自己的图片数据集TFrecords的方法
2018/02/07 Python
Python数据可视化 pyecharts实现各种统计图表过程详解
2019/08/15 Python
pyinstaller打包opencv和numpy程序运行错误解决
2019/08/16 Python
Python编写打字训练小程序
2019/09/26 Python
加州风格的游泳和沙滩装品牌:Cupshe
2019/06/10 全球购物
什么是跨站脚本攻击
2014/12/11 面试题
个人求职简历的自我评价
2013/10/19 职场文书
计算机专业毕业生自荐书
2014/06/02 职场文书
工作散漫检讨书
2014/09/16 职场文书
安全隐患整改报告
2014/11/06 职场文书
个人工作年终总结
2015/03/09 职场文书
党员公开承诺书(2016最新版)
2016/03/24 职场文书
MySQL连接查询你真的学会了吗?
2021/06/02 MySQL
Navicat Premium自定义 sql 标签的创建方式
2022/09/23 数据库