模块和包可以说是NodeJs的重要支柱,模块化可以把一个复杂的工程项目简单化。模块和包没有本质的区别,包是实现某一个功能模块的集合,通常用于发布和维护。但是对于开发者来说,模块和包是透明的。
模块:就是一个NodeJs文件(可以是js,JSON或者编译过的C/C++代码)。 两个重要操作export和require,前者提供模块的公开接口,后者用于从外部获取一个模块的接口。
- 创建模块非常简单,一个文件就是一个模块。模块是node应用程序的基本组成部分,文件和模块是一一对应的。换言之,一个node文件就是一个模块,这个文件可能是js代码,json或者是编译过的c/c++扩展。
- Node提供了exports和require两个对象,其中exports是模块公开的接口,require用于从外部获取一个模块的接口,即获取模块的exports对象。
- 模块可以多次加载,但是只会在第一次加载时运行一次,然后运行结果就被缓冲了,以后在加载,就直接读取缓存结果。要想让模块再次运行,必须清除缓存。
- 模块加载的顺序,按照其在代码中出现的顺序。
- 可以用require函数获取模块,然后才能使用其中的对象。
- Node.js的模块和包机制的实现参照了 CommonJS的标准,但也不是完全遵循。
模块的例子
- 创建一个module.js的文件
- 同目录下创建app.js
- 运行 node app.js




Require加载规则
- 如果参数字符串以“/”开头,则表示加载的是一个位于绝对路径的模块文件
- 如果参数字符串以“./”开头,则表示加载的是一个位于相同路径(跟当前执行脚本的位置相比)的模块文件。
- 如果参数字符串以”../”开头,则表示加载的是一个位于上层路径(跟当前执行脚本的位置相比)的模块文件。
- 如果参数字符串是以上三种之外开头,则表示加载的是一个默认提供的核心模块(位于Node的系统安装目录中),或者一个位于各级node_modules目录的已安装模块
包用于管理多个模块以及依赖关系,可以对多个模块进行封装,包的根目录必须包含package.json文件,package.json文件是CommonJS规范用于描述包的文件,符合CommonJS规范。包是在模块基础上更深一步的抽象,Node的包类似于C/C++的函数库或者java的类库,它将某个独立的功能封装起来,用于发布更新依赖管理和版本控制。
Nodejs 中第三方模块由包组成,可以通过包来对一组具有相互依 赖关系的模块进行统一管理。

包的package.json文件应该包含以下字段:
1.name:包名。包名是唯一的,只能包含小写字母,数字和下划线。 2.version:包版本号。 3.description:包说明。 4.keywords:关键字数组。用于搜索。 5.homepage:项目主页。 6.bugs:提交bug的地址。 7.license:许可证。 8.maintainers:维护者数组。 9.contributors:贡献者数组。 10.repositories:项目仓储托管数组。 11.dependencies:包依赖。
例子: { "name": "mytest", "description": "My test package.", "version": "0.1.0", "keywords": [ "mytest", "nodejs" ], "maintainers": [{ "name": "test", "email": "test@mytest.com" }], "contributors": [{ "name": "test", "web": "http://www.mytest.com/" }], "bugs": { "mail": "test@mytest.com", "web": "http://www.mytest.com/" }, "licenses": [{ "type": "Apache License v2", "url": "http://www.apache.org/licenses/apache2.html" }], "repositories": [{ "type": "git", "url": "http://github.com/test/test.git" }], "dependencies": { "webkit": "1.2", "ssl": { "gnutls": ["1.0", "2.0"], "openssl": "0.9.8" } } }
Npm是包的管理器,用于node包的发布传播依赖控制,npm提供了命令行工具,使你可以方便的下载安装升级删除包。
- 允许用户从 NPM 服务器下载别人编写的第三方包到本地使用。
- 允许用户将自己编写的包或命令行程序上传到 NPM 服务器供别人使用。
1.获取一个包 npm install [package_name] 2.更新一个包 npm update [package_name] 3.卸载一个包 npm uninstall [package_name]
核心模块
http服务器 http.server是http模块中的http服务器对象,用node做的所有基于http协议的系统,都是基于http.server实现的,它提供了一套封装级别很低的API http模块提供了两个函数http.request,http.get,功能是作为客户端向http服务器发起请求。 文件系统fs Fs是文件操作的封装,它提供了文件的读取写入更名删除遍历目录链接等 fs模块中所有的操作都提供了异步和同步的两个版本,例如读取文件内容的函数有 异步的fs.readFile()和同步的fs.readFileSync()。 Util提供常用函数的集合。 util.isArray(), Util.isdate() 详细参考 http://nodejs.org/api/util.html 配置文件中间件config-lite config-lite 是一个轻量的读取配置文件的模块。config-lite 会根据环境变量(NODE_ENV)的不同从当前执行进程目录下的 config 目录加载不同的配置 文件。如果不设置 NODE_ENV,则读取默认的 default 配置文件,如果设置了 NODE_ENV,则会合并指定的配置文件和 default 配置文件作为配 置,config-lite 支持 .js、.json、.node、.yml、.yaml 后缀的文件。