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中的对象化编程
Jan 16 Javascript
jQuery Ajax之load()方法
Oct 12 Javascript
关于IE BUG与字符串截取substr的解决办法
Apr 10 Javascript
判断文件是否正在被使用的JS代码
Dec 21 Javascript
jQuery插件jcrop+Fileapi完美实现图片上传+裁剪+预览的代码分享
Apr 22 Javascript
深入浅析JavaScript字符串操作方法 slice、substr、substring及其IE兼容性
Dec 16 Javascript
confirm确认对话框的实现方法总结
Jun 17 Javascript
JavaScript字符集编码与解码详谈
Feb 02 Javascript
weex里Vuex state使用storage持久化详解
Sep 09 Javascript
Javascript迭代、递推、穷举、递归常用算法实例讲解
Feb 01 Javascript
Vue Render函数创建DOM节点代码实例
Jul 08 Javascript
关于uniApp editor微信滑动问题
Jan 15 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错误和异长常处理总结
2014/03/06 PHP
利用php实现一周之内自动登录存储机制(cookie、session、localStorage)
2016/10/31 PHP
Yii 框架使用Forms操作详解
2020/05/18 PHP
Javascript miscellanea -display data real time, using window.status
2007/01/09 Javascript
js图片处理示例代码
2014/05/12 Javascript
Node.js插件的正确编写方式
2014/08/03 Javascript
js中实现多态采用和继承类似的方法
2014/08/22 Javascript
javascript实现判断鼠标的状态
2015/07/10 Javascript
js实现鼠标点击文本框自动选中内容的方法
2015/08/20 Javascript
拥Bootstrap入怀——导航栏篇
2016/05/30 Javascript
AngularJS延迟加载html template
2016/07/27 Javascript
JavaScript 链式结构序列化详解
2016/09/30 Javascript
js定时器实例分享
2016/12/20 Javascript
详解AngularJS 路由 resolve用法
2017/04/24 Javascript
vue2 前后端分离项目ajax跨域session问题解决方法
2017/04/27 Javascript
Nodejs--post的公式详解
2017/04/29 NodeJs
node.js部署之启动后台运行forever的方法
2018/05/23 Javascript
JS正则表达式常见用法实例详解
2018/06/19 Javascript
Vue中android4.4不兼容问题的解决方法
2018/09/04 Javascript
PWA介绍及快速上手搭建一个PWA应用的方法
2019/01/27 Javascript
详解解决小程序中webview页面多层history返回问题
2019/08/20 Javascript
解决Vue watch里调用方法的坑
2020/11/07 Javascript
[42:32]DOTA2上海特级锦标赛B组资格赛#2 Fnatic VS Spirit第二局
2016/02/27 DOTA
python开发之for循环操作实例详解
2015/11/12 Python
Python3简单实例计算同花的概率代码
2017/12/06 Python
OpenCV2.3.1+Python2.7.3+Numpy等的配置解析
2018/01/05 Python
python变量赋值方法(可变与不可变)
2019/01/12 Python
python实现将文件夹内的每张图片批量分割成多张
2019/07/22 Python
Python 中 -m 的典型用法、原理解析与发展演变
2019/11/11 Python
Python描述符descriptor使用原理解析
2020/03/21 Python
pytorch 实现L2和L1正则化regularization的操作
2021/03/03 Python
理肤泉加拿大官网:La Roche-Posay加拿大
2018/07/06 全球购物
九年级数学教学反思
2014/02/02 职场文书
庆祝三八妇女节标语
2014/10/09 职场文书
2014年环保工作总结
2014/11/26 职场文书
PhpSpreadsheet中文文档 | Spreadsheet操作教程实例
2021/04/01 PHP