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函数般调用正则
Apr 08 Javascript
js兼容标准的表格变色效果
Jun 28 Javascript
基于jQuery的可用于选项卡及幻灯的切换插件
Mar 28 Javascript
js对图片base64编码字符串进行解码并输出图像示例
Mar 17 Javascript
浅谈JS继承_寄生式继承 & 寄生组合式继承
Aug 16 Javascript
Jquery组件easyUi实现手风琴(折叠面板)示例
Aug 23 Javascript
Vue.js每天必学之构造器与生命周期
Sep 05 Javascript
JS+CSS3实现的简易钟表效果示例
Apr 13 Javascript
JavaScript工具库之Lodash详解
Jun 15 Javascript
微信小程序项目总结之记账小程序功能的实现(包括后端)
Aug 20 Javascript
详解Vue 项目中的几个实用组件(ts)
Oct 29 Javascript
vue计算属性+vue中class与style绑定(推荐)
Mar 30 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中用hash实现的数组
2011/07/17 PHP
php之Smarty模板使用方法示例详解
2014/07/08 PHP
php获取图片信息的方法详解
2015/12/10 PHP
Yii基于数组和对象的Model查询技巧实例详解
2015/12/28 PHP
thinkPHP简单实现多个子查询语句的方法
2016/12/05 PHP
php-msf源码详解
2017/12/25 PHP
用js自动判断浏览器分辨率的代码
2007/01/28 Javascript
javascript 模拟点击广告
2010/01/02 Javascript
JavaScript高级程序设计(第3版)学习笔记5 js语句
2012/10/11 Javascript
jQuery中$.fn的用法示例介绍
2013/11/05 Javascript
JavaScript中使用ActiveXObject操作本地文件夹的方法
2014/03/28 Javascript
javascript setinterval 的正确语法如何书写
2014/06/17 Javascript
javascript html5摇一摇功能的实现
2016/04/19 Javascript
Yarn的安装与使用详细介绍
2016/10/25 Javascript
基于vue-cli3+typescript的tsx开发模板搭建过程分享
2020/02/28 Javascript
[16:04]DOTA2海涛带你玩炸弹 9月5日更新内容详解
2014/09/05 DOTA
[06:53]2018DOTA2国际邀请赛寻真——勇于创新的Vici Gaming
2018/08/14 DOTA
python二分查找算法的递归实现方法
2016/05/12 Python
Pycharm 设置默认头的图文教程
2019/01/17 Python
python接口自动化测试之接口数据依赖的实现方法
2019/04/26 Python
python日期相关操作实例小结
2019/06/24 Python
利用python实现AR教程
2019/11/20 Python
Python列表切片常用操作实例解析
2020/03/10 Python
浅析python标准库中的glob
2020/03/13 Python
基于python计算并显示日间、星期客流高峰
2020/05/07 Python
python 实现学生信息管理系统的示例
2020/11/28 Python
在Ubuntu中安装并配置Pycharm教程的实现方法
2021/01/06 Python
香港永安旅游网:Wing On Travel
2017/04/10 全球购物
德国圣伯纳德草药屋:Kräuterhaus Sanct Bernhard(有中文站)
2018/08/05 全球购物
茱莉蔻美国官网:Jurlique美国
2020/11/24 全球购物
施工协议书范本
2014/04/22 职场文书
工作检讨书范文
2015/01/23 职场文书
委托书的样本
2015/01/28 职场文书
css3 filter属性的使用简介
2021/03/31 HTML / CSS
Redis遍历所有key的两个命令(KEYS 和 SCAN)
2021/04/12 Redis
Python中基础数据类型 set集合知识点总结
2021/08/02 Python