Node.js的包详细介绍


Posted in Javascript onJanuary 14, 2015

在Node.js语言中,包和模块并没有本质的不同,包是在模块的基础上更深一步的抽象,包将某个独立的功能封装起来,用于发布、更新、依赖管理和进行版本控制。Node.js根据CommonJS规范实现了包机制,开发了npm来解决包的发布和获取需求。

Node.js的包是一个目录,其中包含JSON格式的包说明文件package.json。Node.js的包基本遵循CommonJS规范,因此具备以下特征:

CommonJS规范定义的包特性:

1)顶层目录包含package.json文件;
2)bin目录存放二进制文件;
3)lib目录存放JavaScript文件;
4)doc目录存放文档;
5)test目录存放单元测试。

Node.js的模块与文件是一一对应的,文件不仅可以是JavaScript源码文件或二进制文件,还可以是目录。最简单的包,就是一个目录的模块。

Node.js的包通常是一些模块的集合,在模块的基础上提供了更高层的抽象,相当于提供了一些固定接口的函数库。
通过定制package.json,我们可以创建更复杂、更完善、更符合规范的包用于发布。

Node.js在调用包时,首先会检查包中的package.json文件的main字段,将其作为包的接口模块,如果package.json文件的main字段不存在,那么Node.js会尝试寻找index.js或index.node作为包的接口。

package.json文件是CommonJS规范用于描述包的文件,完全符合规范的package.json文件应该包含以下字段:
1)name:包名。包名是唯一的,由小写字母、数字和下划线组成,不能含空格。
2)description:包说明。对包进行简要描述。
3)version:版本号。满足《语义化版本识别》规范的版本字符串。
4)keywords:关键字数组,通常用于搜索。
5)maintainers:维护者数组。每个元素包含name、email(可选)、web(可选)字段。
6)contributors:贡献者数组。格式与maintainer数组相同。包作者应该是贡献者数组的第一个元素。
7)bugs:提交bug的地址,可以是网址或电邮地址。
8)licenses:许可证数组。每个元素要包含type(许可证名称)和url(链接到许可证文本的地址)字段。
9)repositories:仓库托管地址数组。每个元素要包含type(仓库的类型,如Git)、url(仓库地址)和path(相对于仓库的路径,可选)字段。
10)dependencies:包依赖。是一个关联数组,由包名和版本号组成。

注:《语义化版本识别》规范是国外提出的一套版本命名规范,最初目的是解决各种各样的版本号大小比较的问题,目前被许多包管理系统所采用。

下面是一个完全符合CommonJS规范的package.json例子:

{   

  "name": "testpackage",  

  "description": "My package for CommonJS.",  

  "version": "0.1.0",  

  "keywords": [  

     "testpackage",  

     "liq"  

  ],   

  "maintainers": [  

     {  

        "name": "liq",  

        "email": "liq@hotmail.com",  

     }  

  ],  

  "contributors": [  

     {  

        "name": "liq",  

        "web": "http://blog.csdn.net/chszs"  

     }  

  ],  

  "bugs": {  

     "mail": "liq@hotmail.com",  

     "web": "http://blog.csdn.net/chszs"  

  },  

  "licenses": [  

     {  

        "type": "Apache License v2",  

        "url": "http://www.apache.org/licenses/apache2.html"  

     }  

  ],  

  "repositories": [  

     {  

        "type": "git",  

        "url": "http://github.com/chszs/packagetest.git"  

     }  

  ],  

  "dependencies": {   

     "webkit": "1.2",  

     "ssl": {   

        "gnutls": ["1.0", "2.0"],  

        "openssl": "0.9.8"  

     }  

  }  

}
Javascript 相关文章推荐
jquery ajax实现下拉框三级无刷新联动,且保存保持选中值状态
Oct 29 Javascript
弹出遮罩层后禁止滚动效果【实现代码】
Apr 29 Javascript
javascript表单事件处理方法详解
May 15 Javascript
jQuery无缝轮播图代码
Dec 22 Javascript
vue.js从安装到搭建过程详解
Mar 17 Javascript
js中less常用的方法小结
Aug 09 Javascript
fetch 使用及如何接收JS传值
Nov 11 Javascript
javascript中new Array()和var arr=[]用法区别
Dec 01 Javascript
vue.extend实现alert模态框弹窗组件
Apr 28 Javascript
webpack4 SCSS提取和懒加载的示例
Sep 03 Javascript
快速对接payjq的个人微信支付接口过程解析
Aug 15 Javascript
搭建Vue从Vue-cli到router路由护卫的实现
Nov 14 Javascript
JavaScript 学习笔记之数据类型
Jan 14 #Javascript
ExpressJS入门实例
Jan 14 #Javascript
jquery加载图片时以淡入方式显示的方法
Jan 14 #Javascript
JavaScript 学习笔记之变量及其作用域
Jan 14 #Javascript
jquery简单图片切换显示效果实现方法
Jan 14 #Javascript
Node.js开发之访问Redis数据库教程
Jan 14 #Javascript
Backbone.js中的集合详解
Jan 14 #Javascript
You might like
php懒人函数 自动添加数据
2011/06/28 PHP
初学PHP的朋友 经常问的一些问题。不断更新
2011/08/11 PHP
ecshop 批量上传(加入自定义属性)
2012/03/20 PHP
PHP不用递归遍历目录下所有文件的代码
2014/07/04 PHP
使用GDB调试PHP代码,解决PHP代码死循环问题
2015/03/02 PHP
php带抄送和密件抄送的邮件发送方法
2015/03/20 PHP
防止浏览器记住用户名及密码的简单实用方法
2013/04/22 Javascript
非常好用的JsonToString 方法 简单实例
2013/07/18 Javascript
JS实现日期加减的方法
2013/11/29 Javascript
JavaScript实现动态删除列表框值的方法
2015/08/12 Javascript
js实现浏览本地文件并显示扩展名的方法
2015/08/17 Javascript
JS自定义滚动条效果简单实现代码
2020/10/27 Javascript
Mint UI 基于 Vue.js 移动端组件库
2017/11/07 Javascript
JavaScript实现重力下落与弹性效果的方法分析
2017/12/20 Javascript
Vue.directive 自定义指令的问题小结
2018/03/04 Javascript
微信小程序自定义对话框弹出和隐藏动画
2018/07/19 Javascript
jQuery.extend 与 jQuery.fn.extend的用法及区别实例分析
2018/07/25 jQuery
[10:34]DOTA2上海特级锦标赛全纪录
2016/03/25 DOTA
python基础教程之基本数据类型和变量声明介绍
2014/08/29 Python
Python实现的彩票机选器实例
2015/06/17 Python
使用Python下载歌词并嵌入歌曲文件中的实现代码
2015/11/13 Python
Python利用Beautiful Soup模块修改内容方法示例
2017/03/27 Python
用python结合jieba和wordcloud实现词云效果
2017/09/05 Python
浅谈Pycharm调用同级目录下的py脚本bug
2018/12/03 Python
python tools实现视频的每一帧提取并保存
2020/03/20 Python
Python 用matplotlib画以时间日期为x轴的图像
2019/08/06 Python
HTML5不支持标签和新增标签详解
2016/06/27 HTML / CSS
Html5 滚动穿透的方法
2019/05/13 HTML / CSS
印度最大的旅游网站:MakeMyTrip
2016/10/05 全球购物
ASOS英国官网:英国在线时装和化妆品零售商
2017/05/19 全球购物
马来西亚领先的在线礼品店:Giftr
2018/08/23 全球购物
预备党员群众路线思想汇报2014
2014/10/25 职场文书
党员年度个人总结
2015/02/14 职场文书
食品安全责任书范本
2015/05/09 职场文书
2016幼儿园新学期寄语
2015/12/03 职场文书
2016年小学端午节活动总结
2016/04/01 职场文书