Skip to content

模块化技术

模块化简介

什么是模块化: 将复杂的程序文件依据一定规则拆分成多个文件,这就编码方式就是模块化的编码方式,拆分出来每个文件就是一个模块,模块的内部数据默认都是私有的,但可以通过一些手段,去暴露模块内的指定数据,供其他模块使用。 模块化的好处:

常见模块化标准:

  • AMD(Asynchronous Module Definition)
  • CMD(Common Module Definition)
  • UMD(Universal Module Definition)
  • ECMAScript 标准

注意:

本教程中我们主要讲解 CommonJS 模块化,因为 Node.js 遵循的是该模块化标准。

CommonJS 初步体验

  1. 创建 a.js,内容如下:
js
//声明函数
function foo() {
  console.log("我是foo函数,我执行了");
}
function bar() {
  console.log("我是bar函数,我执行了");
}

//暴露数据(导出数据)
module.exports = foo;
  1. 创建 index.js,内容如下:
js
//引入模块(导入模块)
const result = require("./a.js");

result();

CommonJS 导出数据

CommonJS 标准中暴露数据的方式有两种:
第一种:
第二种:

注意点:

  1. 每个模块内部的:this、exports、modules.exports 在最初始时,指向的是同一个空对象,但最终暴露的一定是 module.exports 的值,如下图:

commonjs 2. ,即: 才是真正被导出的对象, 是对 的初始引用,仅为了方便给导出象添加属性。所以不能使用 的形式暴露数据。

CommonJS 导入数据

,使用 require 进行导入数据

js
const result = require("./a.js");

CommonJS 注意点

  1. 导入 Node时,直接给 require 传递模块名即可。
  2. 默认情况下导入.js 和.json 文件时,可以省略文件后缀。
  3. 若 require 传递的是文件夹路径,会导入 package.json 文件中 main 属性指定的文件,若不存在,则会导入文件夹下的 index.js 或 index.json,如果依然不存在就会报错。
  4. 每个.js 文件都是一个模块,require 会引起模块代码执行,执行后决定导出内容。
  5. 模块执行时,是被包裹在一个内置的函数中执行的,所以每个模块都有自己的作用域。
js
console.log(arguments);
console.log(arguments.callee.toString());