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直接编辑当前cookie的脚本
Sep 14 Javascript
JavaScript使用技巧精萃[代码非常实用]
Nov 21 Javascript
js 浮动层菜单收藏
Jan 16 Javascript
从零开始学习jQuery (十) jQueryUI常用功能实战
Feb 23 Javascript
js分页代码分享
Apr 28 Javascript
基于JavaScript实现无限加载瀑布流
Jul 21 Javascript
微信小程序实现人脸检测功能
May 25 Javascript
jQuery实现上下滚动公告栏详细代码
Nov 21 jQuery
vue中实现高德定位功能
Dec 03 Javascript
JS实现烟花爆炸效果
Mar 10 Javascript
Vue使用CDN引用项目组件,减少项目体积的步骤
Oct 30 Javascript
Node使用koa2实现一个简单JWT鉴权的方法
Jan 26 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中使用redis队列操作实例代码
2013/02/07 PHP
详解WordPress开发中的get_post与get_posts函数使用
2016/01/04 PHP
YII Framework教程之异常处理详解
2016/03/14 PHP
PHP5.5.15+Apache2.4.10+MySQL5.6.20配置方法分享
2016/05/06 PHP
PHP文件上传处理案例分析
2016/10/15 PHP
php实现自定义中奖项数和概率的抽奖函数示例
2017/05/26 PHP
PHP实现的文件上传类与用法详解
2017/07/05 PHP
php实现的pdo公共类定义与用法示例
2017/07/19 PHP
thinkphp5框架扩展redis类方法示例
2019/05/06 PHP
基于jquery的3d效果实现代码
2011/03/23 Javascript
ajax处理php返回json数据的实例代码
2013/01/24 Javascript
方便实用的jQuery checkbox复选框全选功能简单实例
2013/10/09 Javascript
jquery实现两个图片渐变切换效果的方法
2015/06/25 Javascript
用JavaScript动态建立或增加CSS样式表的实现方法
2016/05/20 Javascript
js字符限制(字符截取) 一个中文汉字算两个字符
2017/09/12 Javascript
Vue中的vue-resource示例详解
2018/11/02 Javascript
js简单的分页器插件代码实例
2019/09/11 Javascript
探究Python中isalnum()方法的使用
2015/05/18 Python
Python文件读取的3种方法及路径转义
2015/06/21 Python
python3实现读取chrome浏览器cookie
2016/06/19 Python
Python实现爬取百度贴吧帖子所有楼层图片的爬虫示例
2018/04/26 Python
windows下python安装pip图文教程
2018/05/25 Python
对pandas中Series的map函数详解
2018/07/25 Python
Python多线程及其基本使用方法实例分析
2019/10/29 Python
使用CSS3代码绘制可爱的Hello Kitty猫
2016/08/03 HTML / CSS
澳洲Chemist Direct药房中文网:澳洲大型线上直邮药房
2019/11/04 全球购物
出国导师推荐信
2014/01/16 职场文书
征婚广告词
2014/03/17 职场文书
小学班主任评语大全
2014/04/23 职场文书
《谁的本领大》教后反思
2014/04/25 职场文书
仙境之桥观后感
2015/06/16 职场文书
诚信教育主题班会
2015/08/13 职场文书
如果用一句诗总结你的上半年,你会用哪句呢?
2019/07/16 职场文书
分享:关于学习的励志名言赏析
2019/08/16 职场文书
mysql主从复制的实现步骤
2021/10/24 MySQL
MySQL Innodb索引机制详细介绍
2021/11/23 MySQL