一、使用Node编写应用程序主要是使用:
1、EcmaScript
2、核心模块:文件操作fs、http服务的http等
3、第三方模块: art-template等
(1)必须通过npm下载才可以使用
4、自定义模块:其实就是自己创建的文件
二、模块化的概念:如果一个平台有文件作用域、通信规则,就是符合模块化(加载require、导出)
三、CommonJS模块规范
1、模块作用域
2、使用
require()方法
加载模块
(1)语法:var 自定义变量名 = require(‘模块’)
;
- 注意这里的‘模块’分为三种: 核心模块、第三方模块、自定义模块
(2)作用
<1>执行被加载模块中的代码
<2>得到被加载模块中的exports对象
3、使用
exports接口对象用来
导出模块中的成员
Node中是模块作用域,默认文件中所有的成员只在当前文件模块有效
(1)导出多个成员(必须在对象中):
直接使用exports起到的是一个挂载的作用,也就是说,要通过“
对象.成员”来
访问成员
(2)导出单个成员(拿到的就是函数、字符串、数字、数组等):如果一个模块需要
直接导出某个成员,而不是挂载到exports对象上,就要使用
module.exports = 成员
<1>后者会覆盖前者
<2>这个方式也可以用来导出多个成员:
module.exports = {};
<3>直接给exports赋值是不管用的:因为
最后return的是module.exports,而不是exports,exports的修改是不影响module.exports的
- 给exports重新赋值会断开和module.exports之间的引用
- 给
module.exports重新赋值也会断开
(3)如果实在分不清exports和module.exports,可以只使用module.exports
4、原理解析:在Node中,每个模块内部都有一个自己的module对象,该对象中又有一个成员exports对象,对外导出成员时,是把导出的成员挂载到module.exports中。而且Node提供了一个专门的变量exports,等于module.exports,所以导出成员的时候可以直接把成员挂载到exports上。
等价于: