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 相关文章推荐
js用Date对象处理时间实现思路及代码
Jan 31 Javascript
fmt:formatDate的输出格式详解
Jan 09 Javascript
JS数组的遍历方式for循环与for...in
Jul 31 Javascript
js实现鼠标划过给div加透明度的方法
May 25 Javascript
一道关于JavaScript变量作用域的面试题
Mar 08 Javascript
Vue.js第四天学习笔记(组件)
Dec 02 Javascript
Three.js如何实现雾化效果示例代码
Sep 27 Javascript
Validform验证时可以为空否则按照指定格式验证
Oct 20 Javascript
mpvue项目中使用第三方UI组件库的方法
Sep 30 Javascript
vue-cli V3.0版本的使用详解
Oct 24 Javascript
使用gulp构建前端自动化的方法示例
Dec 25 Javascript
Vue watch响应数据实现方法解析
Jul 10 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
德生PL330测评
2021/03/02 无线电
解析file_get_contents模仿浏览器头(user_agent)获取数据
2013/06/27 PHP
php实现文件下载功能的几个代码分享
2014/05/10 PHP
destoon设置自定义搜索的方法
2014/06/21 PHP
php计算年龄精准到年月日
2015/11/17 PHP
PHP中抽象类和抽象方法概念与用法分析
2016/05/24 PHP
Yii1.1中通过Sql查询进行的分页操作方法
2017/03/16 PHP
Laravel框架实现利用中间件进行操作日志记录功能
2018/06/06 PHP
Ctrl+Enter提交内容信息
2006/06/26 Javascript
jQuery学习笔记之控制页面实现代码
2012/02/27 Javascript
向左滚动文字 js代码效果
2013/08/17 Javascript
jquery弹出框的用法示例(一)
2013/08/26 Javascript
JavaScript跨平台的开源框架NativeScript
2015/03/24 Javascript
JS中关于事件处理函数名后面是否带括号的问题
2016/11/16 Javascript
使用axios发送post请求,将JSON数据改为form类型的示例
2019/10/31 Javascript
vue路由传参三种基本方式详解
2019/12/09 Javascript
[01:30:15]DOTA2-DPC中国联赛 正赛 Ehome vs Aster BO3 第二场 2月2日
2021/03/11 DOTA
用Python中的__slots__缓存资源以节省内存开销的方法
2015/04/02 Python
Python的gevent框架的入门教程
2015/04/29 Python
使用Python的Flask框架来搭建第一个Web应用程序
2016/06/04 Python
Python获取暗黑破坏神3战网前1000命位玩家的英雄技能统计
2016/07/04 Python
使用python搭建服务器并实现Android端与之通信的方法
2019/06/28 Python
Django学习之文件上传与下载
2019/10/06 Python
pytorch 实现查看网络中的参数
2020/01/06 Python
在python中使用nohup命令说明
2020/04/16 Python
Python插件机制实现详解
2020/05/04 Python
Django后端分离 使用element-ui文件上传方式
2020/07/12 Python
Python利用matplotlib绘制折线图的新手教程
2020/11/05 Python
canvas探照灯效果的示例代码
2018/11/30 HTML / CSS
phpquery中文手册
2021/03/18 PHP
电子商务专业学生职业生涯规划
2014/03/07 职场文书
结对共建工作方案
2014/06/02 职场文书
任命书范本大全
2014/06/06 职场文书
2014领导班子“四风问题”对照检查材料思想汇报(执法局)
2014/09/21 职场文书
外出考察学习心得体会
2016/01/18 职场文书
python基础之停用词过滤详解
2021/04/21 Python