模块(Modules)


稳定度:3 - 已锁定

Node.js 有一个简单的模块加载系统。在 Node.js 中,文件和模块是一一对应的(每个文件被视为一个单独的模块)。举个例子,foo.js 加载同一目录下的 circle.js 模块。

foo.js 的内容:

  1. const circle = require('./circle.js');
  2. console.log(`The area of a circle of radius 4 is ${circle.area(4)}`);

circle.js 的内容:

  1. const PI = Math.PI;
  2. exports.area = (r) => PI * r * r;
  3. exports.circumference = (r) => 2 * PI * r;

circle.js 模块导出了 area()circumference() 两个函数。为了将函数和对象添加进你的模块根,你可以将它们添加到特殊的 exports 对象下。

模块内的本地变量是私有的,因为模块被 Node.js 包装在一个函数中(详见模块包装器)。在这个例子中,变量 PI 就是 circle.js 私有的。

如果你希望将你的模块根导出为一个函数(比如构造函数)或一次导出一个完整的对象而不是每一次都创建一个属性,请赋值给 module.exports 而不是 exports

下面,我将在 bar.js 中使用 square 模块导出的构造函数。

  1. const square = require('./square.js');
  2. var mySquare = square(2);
  3. console.log(`The area of my square is ${mySquare.area()}`);

square 模块定义在 square.js 中:

  1. // 赋值给 exports 将不会修改模块,必须使用 module.exports
  2. module.exports = (width) => {
  3. return {
  4. area: () => width * width
  5. };
  6. }

模块系统在 require("module") 中实现。