模块化技术
模块化简介
什么是模块化: 将复杂的程序文件依据一定规则拆分成多个文件,这就编码方式就是模块化的编码方式,拆分出来每个文件就是一个模块,模块的内部数据默认都是私有的,但可以通过一些手段,去暴露模块内的指定数据,供其他模块使用。 模块化的好处:
常见模块化标准:
- AMD(Asynchronous Module Definition)
- CMD(Common Module Definition)
- UMD(Universal Module Definition)
- ECMAScript 标准
注意:
本教程中我们主要讲解 CommonJS 模块化,因为 Node.js 遵循的是该模块化标准。
CommonJS 初步体验
- 创建 a.js,内容如下:
js
//声明函数
function foo() {
console.log("我是foo函数,我执行了");
}
function bar() {
console.log("我是bar函数,我执行了");
}
//暴露数据(导出数据)
module.exports = foo;- 创建 index.js,内容如下:
js
//引入模块(导入模块)
const result = require("./a.js");
result();CommonJS 导出数据
CommonJS 标准中暴露数据的方式有两种:
第一种:
第二种:
注意点:
- 每个模块内部的:this、exports、modules.exports 在最初始时,指向的是同一个空对象,但最终暴露的一定是 module.exports 的值,如下图:
2. ,即: 才是真正被导出的对象, 是对 的初始引用,仅为了方便给导出象添加属性。所以不能使用 的形式暴露数据。
CommonJS 导入数据
在,使用 require 进行导入数据
js
const result = require("./a.js");CommonJS 注意点
- 导入 Node时,直接给 require 传递模块名即可。
- 默认情况下导入.js 和.json 文件时,可以省略文件后缀。
- 若 require 传递的是文件夹路径,会导入 package.json 文件中 main 属性指定的文件,若不存在,则会导入文件夹下的 index.js 或 index.json,如果依然不存在就会报错。
- 每个.js 文件都是一个模块,require 会引起模块代码执行,执行后决定导出内容。
- 模块执行时,是被包裹在一个内置的函数中执行的,所以每个模块都有自己的作用域。
js
console.log(arguments);
console.log(arguments.callee.toString());
