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 22 Javascript
优化网页之快速的呈现我们的网页
Jun 29 Javascript
6款经典实用的jQuery小插件及源码(对话框/提示工具等等)
Feb 04 Javascript
ie8本地图片上传预览示例代码
Jan 12 Javascript
AngularJS 指令详细介绍
Jul 27 Javascript
移动端js图片查看器
Nov 17 Javascript
JS实现DIV高度自适应窗口示例
Feb 16 Javascript
基于vue2实现上拉加载功能
Nov 28 Javascript
详解微信小程序图片地扯转base64解决方案
Aug 18 Javascript
js实现图片实时时钟
Jan 15 Javascript
vue 解决uglifyjs-webpack-plugin打包出现报错的问题
Aug 04 Javascript
Canvas三种动态画圆实现方法说明(小结)
Apr 16 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
星际争霸 Starcraft 游戏介绍
2020/03/14 星际争霸
一个完整的php文件上传类实例讲解
2015/10/27 PHP
告诉大家什么是JSON
2008/06/10 Javascript
jQuery 1.7.2中getAll方法的疑惑分析
2012/05/23 Javascript
javascript for循环从入门到偏门(效率优化+奇特用法)
2012/08/01 Javascript
JS实现侧悬浮浮动实例代码
2013/11/29 Javascript
jQuery实现当按下回车键时绑定点击事件
2014/01/28 Javascript
window.location不跳转的问题解决方法
2014/04/17 Javascript
jQuery插件jFade实现鼠标经过的图片高亮其它变暗
2015/03/14 Javascript
原生Js实现简易烟花爆炸效果的方法
2015/03/20 Javascript
jquery zTree异步加载、模糊搜索简单实例分享
2016/03/24 Javascript
JS实现本地存储信息的方法(基于localStorage与userData)
2017/02/18 Javascript
npm国内镜像 安装失败的几种解决方案
2017/06/04 Javascript
JS按钮闪烁功能的实现代码
2017/07/21 Javascript
layer子层给父层页面元素赋值,以达到向父层页面传值的效果实例
2017/09/22 Javascript
vue基础之事件v-onclick="函数"用法示例
2019/03/11 Javascript
JS前端知识点 运算符优先级,URL编码与解码,String,Math,arguments操作整理总结
2019/06/27 Javascript
在Layui中操作数据表格,给指定单元格添加事件示例
2019/10/26 Javascript
vue实现点击出现操作弹出框的示例
2020/11/05 Javascript
javascript实现点击小图显示大图
2020/11/29 Javascript
python不带重复的全排列代码
2013/08/13 Python
python机器学习之神经网络(二)
2017/12/20 Python
Python实现抢购IPhone手机
2018/02/07 Python
Python实现word2Vec model过程解析
2019/12/16 Python
Python中用pyinstaller打包时的图标问题及解决方法
2020/02/17 Python
如何使用python切换hosts文件
2020/04/29 Python
python搜索算法原理及实例讲解
2020/11/18 Python
html5 svg 中元素点击事件添加方法
2013/01/16 HTML / CSS
Surfdome西班牙:世界上最受欢迎的生活方式品牌
2019/02/13 全球购物
美德少年事迹材料
2014/01/23 职场文书
社区母亲节活动总结
2015/02/10 职场文书
小学运动会入场词
2015/07/18 职场文书
法律服务所工作总结
2015/08/10 职场文书
java设计模式--建造者模式详解
2021/07/21 Java/Android
Golang 并发编程 SingleFlight模式
2022/04/26 Golang
Python测试框架pytest高阶用法全面详解
2022/06/01 Python