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"
        }
    }
}
来源: 雨林博客(www.yl-blog.com)