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 学习笔记(七)字符串的连接
Dec 31 Javascript
jQuery each()方法的使用方法
Mar 18 Javascript
基于jquery的3d效果实现代码
Mar 23 Javascript
通过location.replace禁止浏览器后退防止重复提交
Sep 04 Javascript
js分页工具实例
Jan 28 Javascript
Wireshark基本介绍和学习TCP三次握手
Aug 15 Javascript
vue.js移动端app之上拉加载以及下拉刷新实战
Sep 11 Javascript
详解如何在vue项目中使用layui框架及采坑
May 05 Javascript
为nuxt项目写一个面包屑cli工具实现自动生成页面与面包屑配置
Sep 29 Javascript
基于JavaScript的数据结构队列动画实现示例解析
Aug 06 Javascript
js属性对象的hasOwnProperty方法的使用
Feb 05 Javascript
vue使用Google Recaptcha验证的实现示例
Aug 23 Vue.js
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中ob(Output Buffer 输出缓冲)函数使用方法
2007/07/21 PHP
一个比较简单的PHP 分页分组类
2009/12/10 PHP
PHP register_shutdown_function函数的深入解析
2013/06/03 PHP
解析smarty模板中类似for的功能实现
2013/06/18 PHP
PHP类中的魔术方法(Magic Method)简明总结
2014/07/08 PHP
ci检测是ajax还是页面post提交数据的方法
2014/11/10 PHP
php数组查找函数总结
2014/11/18 PHP
PHP7安装Redis扩展教程【Linux与Windows平台】
2016/09/30 PHP
php记录搜索引擎爬行记录的实现代码
2018/03/02 PHP
JS 参数传递的实际应用代码分析
2009/09/13 Javascript
用JSON做数据传输格式中的一些问题总结
2011/12/21 Javascript
基于jquery实现的文字向上跑动类似跑马灯的效果
2014/06/17 Javascript
jQuery插件jcrop+Fileapi完美实现图片上传+裁剪+预览的代码分享
2015/04/22 Javascript
jQuery+CSS实现滑动的标签分栏切换效果
2015/12/17 Javascript
详解用webpack2搭建angular2的项目
2017/06/22 Javascript
AngularJS 中ui-view传参的实例详解
2017/08/25 Javascript
vue的diff算法知识点总结
2018/03/29 Javascript
对vue v-if v-else-if v-else 的简单使用详解
2018/09/29 Javascript
微信小程序导航栏跟随滑动效果的实现代码
2019/05/14 Javascript
vue语法自动转typescript(解放双手)
2019/09/18 Javascript
关于layui的下拉搜索框异步加载数据的解决方法
2019/09/28 Javascript
[42:20]2014 DOTA2华西杯精英邀请赛5 24 DK VS NewBee
2014/05/25 DOTA
python益智游戏计算汉诺塔问题示例
2014/03/05 Python
Python中使用异常处理来判断运行的操作系统平台方法
2015/01/22 Python
Python二进制串转换为通用字符串的方法
2018/07/23 Python
使用Py2Exe for Python3创建自己的exe程序示例
2018/10/31 Python
Django 实现xadmin后台菜单改为中文
2019/11/15 Python
python Selenium 库的使用技巧
2020/10/16 Python
Python爬虫爬取有道实现翻译功能
2020/11/27 Python
求职自荐信
2013/12/14 职场文书
创业计划书中包含的9个方面
2013/12/26 职场文书
暑期社会实践学生的自我评价
2014/01/09 职场文书
秸秆管理实施方案
2014/03/15 职场文书
倡议书范文格式
2014/05/12 职场文书
判断Python中的Nonetype类型
2021/05/25 Python
Python 使用 Frame tkraise() 方法在 Tkinter 应用程序中的Frame之间切换
2022/04/24 Python