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 相关文章推荐
Javascript将string类型转换int类型
Dec 09 Javascript
js实现无需数据库的县级以上联动行政区域下拉控件
Aug 14 Javascript
如何书写高质量jQuery代码(使用jquery性能问题)
Jun 30 Javascript
javascript 实现map集合
Apr 03 Javascript
JS实现三级折叠菜单特效,其它级可自动收缩
Aug 06 Javascript
jQuery实现分页功能(含ajax请求、后台数据、附完整demo)
Apr 03 jQuery
angularjs使用div模拟textarea文本框的方法
Oct 02 Javascript
js嵌套的数组扁平化:将多维数组变成一维数组以及push()与concat()区别的讲解
Jan 19 Javascript
vue实现滑动到底部加载更多效果
Oct 27 Javascript
layui的表单验证支持ajax判断用户名是否重复的实例
Sep 06 Javascript
Openlayers实现地图全屏显示
Sep 28 Javascript
TS 类型兼容教程示例详解
Sep 23 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
攻克CakePHP系列二 表单数据显示
2008/10/22 PHP
php遍历解析xml字符串的方法
2016/05/05 PHP
php+mysql开发中的经验与常识小结
2019/03/25 PHP
PHP实现随机发扑克牌
2020/04/22 PHP
深入document.write()与HTML4.01的非成对标签的详解
2013/05/08 Javascript
js验证模型自我实现的具体方法
2013/06/21 Javascript
深入理解JQuery keyUp和keyDown的区别
2013/12/12 Javascript
jQuery学习笔记之jQuery构建函数的7种方法
2014/06/03 Javascript
基于socket.io和node.js搭建即时通信系统
2014/07/30 Javascript
js实现二代身份证号码验证详解
2014/11/20 Javascript
什么是MEAN?JavaScript编程中的MEAN是什么意思?
2014/12/18 Javascript
jQuery实现限制textarea文本框输入字符数量的方法
2015/05/28 Javascript
JavaScript中setFullYear()方法的使用详解
2015/06/11 Javascript
jQuery使用contains过滤器实现精确匹配方法详解
2016/02/25 Javascript
jquery ajaxfileupload异步上传插件
2017/11/21 jQuery
vue 自定义全局方法,在组件里面的使用介绍
2018/02/28 Javascript
Vue2.0 事件的广播与接收(观察者模式)
2018/03/14 Javascript
JS如何实现封装列表右滑动删除收藏按钮
2020/07/23 Javascript
学习python (1)
2006/10/31 Python
python基础教程之匿名函数lambda
2017/01/17 Python
从头学Python之编写可执行的.py文件
2017/11/28 Python
python逆向入门教程
2018/01/15 Python
python3 requests中使用ip代理池随机生成ip的实例
2018/05/07 Python
Django使用Mysql数据库已经存在的数据表方法
2018/05/27 Python
Python多线程模块Threading用法示例小结
2019/11/09 Python
在django admin详情表单显示中添加自定义控件的实现
2020/03/11 Python
python爬虫筛选工作实例讲解
2020/11/23 Python
CSS类名支持中文命名的示例
2014/04/04 HTML / CSS
纯CSS3实现给头像加个光芒四射且旋转的背景动画效果
2014/05/07 HTML / CSS
美国女性奢华品牌精品店:INTERMIX
2017/10/12 全球购物
室内设计自我鉴定
2013/10/15 职场文书
行政专员岗位职责
2014/01/02 职场文书
优秀大专毕业生求职信
2014/08/04 职场文书
学习党的群众路线教育实践活动心得体会范文
2014/11/03 职场文书
傲慢与偏见读书笔记
2015/06/29 职场文书
解决flex布局中子项目尺寸不受flex-shrink限制
2022/05/11 HTML / CSS