对于包来说,如果你不使用nodejs来开发框架,此节可以忽略。
实际上包是在模块基础上更深一步的抽象,Node.js 的包类似于C/C++ 的函数库或者Java/.Net
的类库。
它将某个独立的功能封装起来,用于发布、更新、依赖管理和版本控制。
nodejs中提供了npm[包管理工具]来管理包。
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 文件应该含有以下字段:
name:包的名称,必须是唯一的,由小写英文字母、数字和下划线组成,不能包含
空格。
description:包的简要说明。
version:符合语义化版本识别①规范的版本字符串。
keywords:关键字数组,通常用于搜索。
maintainers:维护者数组,每个元素要包含 name、email (可选)、web (可选)
字段。
contributors:贡献者数组,格式与maintainers相同。包的作者应该是贡献者
数组的第一个元素。
bugs:提交bug的地址,可以是网址或者电子邮件地址。
licenses:许可证数组,每个元素要包含 type (许可证的名称)和 url (链接到
许可证文本的地址)字段。
repositories:仓库托管地址数组,每个元素要包含 type (仓库的类型,如 git )、
url (仓库的地址)和 path (相对于仓库的路径,可选)字段。
dependencies:包的依赖,一个关联数组,由包名称和版本号组成。
{ "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" } } }