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 相关文章推荐
Bootstrap入门书籍之(三)栅格系统
Feb 17 Javascript
基于BootStrap Metronic开发框架经验小结【五】Bootstrap File Input文件上传插件的用法详解
May 12 Javascript
JavaScript语言精粹经典实例(整理篇)
Jun 07 Javascript
js读取json文件片段中的数据实例
Mar 09 Javascript
详解Vue项目编译后部署在非网站根目录的解决方案
Apr 26 Javascript
JS实现Cookie读、写、删除操作工具类示例
Aug 28 Javascript
微信小程序日历/日期选择插件使用方法详解
Dec 28 Javascript
Vue渲染过程浅析
Mar 14 Javascript
js设计模式之单例模式原理与用法详解
Aug 15 Javascript
javascript实现切割轮播效果
Nov 28 Javascript
vue修饰符.capture和.self的区别
Apr 22 Vue.js
React如何使用axios请求数据并把数据渲染到组件
Aug 05 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添加Xdebug扩展的方法
2014/02/12 PHP
php魔术方法功能与用法实例分析
2016/10/19 PHP
thinkphp5.1 文件引入路径问题及注意事项
2018/06/13 PHP
浅谈laravel 5.6 安装 windows上使用composer的安装过程
2019/10/18 PHP
php利用ZipArchive类操作文件的实例
2020/01/21 PHP
ext form 表单提交数据的方法小结
2008/08/08 Javascript
ASP.NET jQuery 实例18 通过使用jQuery validation插件校验DropDownList
2012/02/03 Javascript
原生js实现跨浏览器获取鼠标按键的值
2013/04/08 Javascript
jquery实现瀑布流效果分享
2014/03/26 Javascript
js封装可使用的构造函数继承用法分析
2015/01/28 Javascript
在JavaScript的jQuery库中操作AJAX的方法讲解
2015/08/15 Javascript
jQuery弹簧插件编写基础之“又见弹窗”
2015/12/11 Javascript
基于JavaScript实现表单密码的隐藏和显示出来
2016/03/02 Javascript
jQuery mobile在页面加载时添加加载中效果 document.ready 和window.onload执行顺序比较
2016/07/14 Javascript
关于微信中a链接无法跳转问题
2016/08/02 Javascript
从零开始学习Node.js系列教程之基于connect和express框架的多页面实现数学运算示例
2017/04/13 Javascript
Angular4集成ng2-file-upload的上传组件
2018/03/14 Javascript
vue中如何实现后台管理系统的权限控制的方法示例
2018/09/19 Javascript
一文秒懂JavaScript构造函数、实例、原型对象以及原型链
2020/08/25 Javascript
通过滑动翻页效果实现和移动端click事件问题
2021/01/26 Javascript
python计算程序开始到程序结束的运行时间和程序运行的CPU时间
2013/11/28 Python
python删除文件示例分享
2014/01/28 Python
Python使用tablib生成excel文件的简单实现方法
2016/03/16 Python
Python中字符串的处理技巧分享
2016/09/17 Python
Python3实现将本地JSON大数据文件写入MySQL数据库的方法
2018/06/13 Python
Python 从subprocess运行的子进程中实时获取输出的例子
2019/08/14 Python
在 Python 中使用 7zip 备份文件的操作
2020/12/11 Python
使用CSS3创建动态菜单效果
2015/07/10 HTML / CSS
英国复古和经典球衣网站:Vintage Football Shirts
2018/10/05 全球购物
The Outnet亚太地区:折扣设计师时装店
2019/12/05 全球购物
指针和引用有什么区别
2013/01/13 面试题
预备党员转正思想汇报
2014/01/12 职场文书
2013年最新自荐信范文
2014/06/23 职场文书
演讲开头怎么书写?
2019/08/06 职场文书
Python爬虫入门案例之爬取二手房源数据
2021/10/16 Python
Echarts如何重新渲染实例详解
2022/05/30 Javascript