Node.js学习(7)----包

包是在模块的基础上更深一步的抽象,Node.js的包相似于C/C++函数库或者Java/.NET的类库。它将独立的功能封装起来用于发布、更新、依赖管理和版本控制。javascript

Node.js的包是一个目录,其中包含一个JSON格式的包说明文件package.json.这里必须在顶层目录下。为了提供兼容性,咱们建议严格按照commonJS规范。html

严格符合CommonJS规范的包应该具有如下特征:java

#一、package.json必须在包的顶层目录下。node

#二、二进制文件必须在bin目录下。git

#三、Javascript代码应该在lib目录下。github

#四、文档应该在doc目录下。web

#五、单元测试应该在test目录下。json


一、做为文件夹的模块

模块与文件一一对应。文件不只能够是Javascript代码或二进制代码,还能够是一个文件夹。最简单的包就是一个做为文件夹的模块。数组

#一、创建一个somepackage文件夹函数

#二、在somepackage下创建index.js文件

#三、文件中写入

 

exports.hello=function(){
	console.log('Hello World');
};

#四、在somepackage文件夹外创建一个getpackage.js文件

 

#五、写入

 

var somepackage=require('./somepackage');
somepackage.hello();

#六、输出:Hello Wolrd

 

咱们使用这种方法能够把文件夹封装为一个模块,即所谓的包。包一般是一些模块的集合,在模块的基础上提供更高层的抽象,至关于提供了一些固定接口的函数库。经过定制package.json,咱们能够建立更复杂、更完善、更符合标准的包用于发布。


二、package.json

在somepackage中建立package.json,写入:

 

{
	"main":"./lib/interface.js"
}

在somepackage中创建lib子文件夹,并在其中建立interface.js文件,在文件中写入:

 

 

exports.hello=function(){
	console.log('Hello Node.js');
};

运行上面的getpackage.js,则运行结果为:Hello Node.js

Node.js在调用某个包时,会首先检查包中package.json中的main字段,将其做为包的接口模块,若是main不存在,会尝试寻找index.js或者index.node做为包的接口。

package.json 是 CommonJS 规定的用来描述包的文件,彻底符合规范的 package.json 文
件应该含有如下字段。
 name:包的名称,必须是惟一的,由小写英文字母、数字和下划线组成,不能包含空格。
 description:包的简要说明。
 version:符合语义化版本识别①规范的版本字符串。
 keywords:关键字数组,一般用于搜索。
 maintainers:维护者数组,每一个元素要包含 name、email (可选)、web (可选)字段。
 contributors:贡献者数组,格式与maintainers相同。包的做者应该是贡献者数组的第一个元素。
 bugs:提交bug的地址,能够是网址或者电子邮件地址。
 licenses:许可证数组,每一个元素要包含 type (许可证的名称)和 url (连接到许可证文本的地址)字段。
 repositories:仓库托管地址数组,每一个元素要包含 type (仓库的类型,如 git )、url (仓库的地址)和 path (相对于仓库的路径,可选)字段。

 dependencies:包的依赖,一个关联数组,由包名称和版本号组成。

下面是一个彻底符合 CommonJS 规范的 package.json 示例:

 

{
"name": "mypackage",
"description": "Sample package for CommonJS. This package demonstrates the required
elements of a CommonJS package.",
"version": "0.7.0",
"keywords": [
"package",
"example"
],
"maintainers": [
{
"name": "Bill Smith",
"email": "bills@example.com",
}
],
"contributors": [
{
"name": "BYVoid",
"web": "http://www.byvoid.com/"
}
],
"bugs": {
"mail": "dev@example.com",
"web": "http://www.example.com/bugs"
},
"licenses": [
{
"type": "GPLv2",
"url": "http://www.example.org/licenses/gpl.html"
}
],
"repositories": [
{
"type": "git",
"url": "http://github.com/BYVoid/mypackage.git"
}
],
"dependencies": {
"webkit": "1.2",
"ssl": {
"gnutls": ["1.0", "2.0"],
"openssl": "0.9.8"
}
}
}
相关文章
相关标签/搜索