包的概念与模块的概念在于,包是一个整体,具有某个功能的集合,简单的来说就是一个文件夹,里面包含各个模块
创建包
新建一个文件夹,随便取一个名字,我取名为doctorq,然后再该文件下新建一个js文件,注意这个时候的名称必须为index.js,不然node是识别不了的。
//doctorq/index.js
exports.hello = function(){
console.log('Hello.');
};
在doctorq文件夹同级目录下新建一个test.js,我们来引用我们创建的包:
//test.js
var package1= require('./doctorq');
package1.hello();
执行该脚本
D:\node.js\0212>node test.js
Hello.
D:\node.js\0212>
可以看出我们成功引用了我们的包。
package.json
上面的例子中,我们说包下的模块文件必须是index.js,不然外部是引用不到的,这样添加其他模块肯定是不行的,那么CommonJS为我们定义了一个叫package.json的文件,这个文件是干啥的,我们先来看一个例子就明白了。首先我们新建一个lib目录,我们将上面的doctorq文件下的index.js移到该目录下,并将文件名修改为comeon.js。这个时候执行test.js肯定是引用不到的,会报错的。ok,重点来了。这个时候我们在doctorq目录下新建一个一个package.json文件,在里面添加如下代码:
//package.json
{
"main":"./lib/comeon.js"
}
这个时候我们运行test.js是没有问题的。说明我们的package.json起作用啦。那么很显然package.json起到的作用有点类似于清单文件,它里面列举了lib下的含有的模块,这样外部引用的时候就能定位到相应的模块。引用我学习的书中一句话。就能解释上面的程序了:
Node.js 在调用某个包时,会首先检查包中 package.json 文件的 main 字段,将其作为
包的接口模块,如果 package.json 或 main 字段不存在,会尝试寻找 index.js 或 index.node 作
为包的接口
-
下面来看看package.json有哪些属性:
- 1.name包名称,唯一
- 2.description:包的描述信息
- 3.version:版本
- 4.keywords:用于搜索的关键字
- 5.maintainers :维护人员
- 6.contributors:贡献人员
- 7.bugs : 提交bug的地址,网址或邮件
- 8.licenses:许可信息
- 9.repositories:仓库托管信息
-
10.dependencies:依赖信息
怎么让我想到gradle的脚本,真的很神似啊,什么时候让gradle给nodejs提供一个plugin呢?maybe
下面看一个样本:
//package.json
{
"main":"./lib/comeon.js",
"name":"doctorq",
"description":"test for package.json",
"version":"0.7.0",
"keywords":["testerhome","doctorq"],
"maintainers":[{"name":"doctorq","email":"542113578@qq.com"}],
"contributors":[{"name":"doctorq","web":"http://blog.csdn.net/itfootball"}],
"bugs":{"mail":"542113578@qq.com","web":"http://blog.csdn.net/itfootball"},
"licenses":[{"type":"234sdjdfd","url":"http://www.google.com"}],
"repositories":[{"type":"git","url":"http://github.com/BYVoid/mypackage"}],
"dependencies":{
"webkit":"1.2",
"ssl":{
"gnutls":["1.0","2.0"],
"openssl":"0.9.8"
}
},
}
(说实话这个文件真心不好写,写的脑袋疼,警告node.js开发者赶紧换吧,这样定义文件你累不累。)