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 相关文章推荐
文字幻灯片
Jun 26 Javascript
使用JavaScript获取地址栏参数的方法
Dec 19 Javascript
JavaScript数据结构与算法之栈详解
Mar 12 Javascript
Bootstrap教程JS插件滚动监听学习笔记分享
May 18 Javascript
JS点击某个图标或按钮弹出文件选择框的实现代码
Sep 27 Javascript
Bootstrap中定制LESS-颜色及导航条(推荐)
Nov 21 Javascript
Vue组件化通讯的实例代码
Jun 23 Javascript
vue用addRoutes实现动态路由的示例
Sep 15 Javascript
JavaScript 复制对象与Object.assign方法无法实现深复制
Nov 02 Javascript
优雅的将ElementUI表格变身成树形表格的方法步骤
Apr 11 Javascript
详解Vue-cli3.X使用px2rem遇到的问题
Aug 09 Javascript
vue.js iview打包上线后字体图标不显示解决办法
Jan 20 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 curl_setopt()函数实例代码与参数分析
2011/06/02 PHP
php无法连接mysql数据库的正确解决方法
2016/07/01 PHP
php封装的验证码工具类完整实例
2016/10/19 PHP
PHP多线程模拟实现秒杀抢单
2018/02/07 PHP
javascript小组件 原生table排序表格脚本(兼容ie firefox opera chrome)
2012/07/25 Javascript
关于JS管理作用域的问题
2013/04/10 Javascript
JS控件ASP.NET的treeview控件全选或者取消(示例代码)
2013/12/16 Javascript
用js将内容复制到剪贴板兼容浏览器
2014/03/18 Javascript
影响jQuery使用的14个方面
2014/09/01 Javascript
js获取数组的最后一个元素
2015/04/14 Javascript
如何使用Bootstrap的modal组件自定义alert,confirm和modal对话框
2016/03/01 Javascript
NodeJS的Promise的用法解析
2016/05/05 NodeJs
jquery ezUI 双击行记录弹窗查看明细的实现方法
2016/06/01 Javascript
AngularJs 国际化(I18n/L10n)详解
2016/09/01 Javascript
jQuey将序列化对象在前台显示地实现代码(方法总结)
2016/12/13 Javascript
JS正则子匹配实例分析
2016/12/22 Javascript
Javascript(es2016) import和require用法和区别详解
2017/08/11 Javascript
seajs实现强制刷新本地缓存的方法分析
2017/10/16 Javascript
jQuery中的for循环var与let的区别
2018/04/21 jQuery
JS一次前端面试经历记录
2020/03/19 Javascript
JS实现简单打字测试
2020/06/24 Javascript
[02:38]2018年度DOTA2最佳劣单位选手-完美盛典
2018/12/17 DOTA
Python定时任务sched模块用法示例
2018/07/16 Python
浅谈cookie和localStorage那些事
2019/08/27 HTML / CSS
路政管理毕业自荐书范文
2014/02/10 职场文书
教师职称自我鉴定
2014/02/12 职场文书
教育技术职业规划范文
2014/03/04 职场文书
会计核算科岗位职责
2014/03/19 职场文书
参赛口号
2014/06/16 职场文书
日语专业求职信
2014/07/04 职场文书
高中综合实践活动总结
2014/07/07 职场文书
《中国梦我的梦》大学生演讲稿
2014/08/20 职场文书
英文慰问信
2015/02/14 职场文书
2015年班主任个人工作总结
2015/03/31 职场文书
2015年小学图书室工作总结
2015/05/18 职场文书
postgresql 删除重复数据案例详解
2021/08/02 PostgreSQL