Node.js 包的开发
前言
对于包来说,如果你不使用nodejs来开发框架,此节可以忽略。
什么是包?
实际上包是在模块基础上更深一步的抽象,Node.js 的包类似于C/C++ 的函数库或者Java/.Net
的类库。
包有什么作用?
它将某个独立的功能封装起来,用于发布、更新、依赖管理和版本控制。
通过什么来管理包?
nodejs中提供了npm[包管理工具]来管理包。
包结构(这里使用express例子)
express
+ bin //二进制文件
+ lib //JavaScript 代码
+ doc //文档
+ test //单元测试文件
+ package.json //包描述文件
创建第一个包
// util-qq/index.js
//这里我们就值写一个简单的函数
exports.getInfo = function(){
console.log("request qq info");
}
// test.js
//加载模块,这里为文件夹名称
var qq = require("./util-qq");
qq.getInfo();
打印结果:
request qq info
[注意:包可以是一个空文件夹,加载包模块时候,先检查包中package.json
文件的main 字段的js文件作为包的接口,如果不存在package.json。
会尝试寻找index.js 或index.node 作为包的接口]
建立一个符合规范的包
// 将index.js更名为qqinfo.js移动到util-qq/lib/qqinfo.js
// util-qq/package.json
{
"main" : "./lib/qqinfo.js"
}
// 再次执行test.js可得到同样结果。
package.json是CommonJS规定
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:包的依赖,一个关联数组,由包名称和版本号组成。
package.json文件例子
{
"name": "mypackage",
"description": "Sample package for CommonJS. This package demonstrates the required elements of a CommonJS package.",
"version": "0.1.0",
"keywords": [
"package",
"example"
],
"maintainers": [
{
"name": "Bill Smith",
"email": "bills@example.com",
}
],
"contributors": [
{
"name": "yl-blog",
"web": "http://localhost:8887/test/"
}
],
"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/ylblog/mypackage.git"
}
],
"dependencies": {
"webkit": "1.2",
"ssl": {
"gnutls": ["1.0", "2.0"],
"openssl": "0.9.8"
}
}
}