稳定性: 2 - 稳定

    在 Node.js 模块系统中,每个文件都被视为一个独立的模块。 例如,假设有一个名为 foo.js 的文件:

    1. const circle = require('./circle.js');
    2. console.log(`半径为 4 的圆的面积是 ${circle.area(4)}`);

    在第一行中,foo.js 加载了与 foo.js 在同一目录中的 circle.js 模块。

    以下是 circle.js 的内容:

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

    circle.js 模块导出了 area()circumference() 函数。 通过在特殊的 exports 对象上指定额外的属性,可以将函数和对象添加到模块的根部。

    模块内的本地变量是私有的,因为模块由 Node.js 封装在一个函数中(详见[模块封装器][module wrapper])。 在这个例子中,变量 PIcircle.js 是私有的。

    可以为 module.exports 属性分配新的值(例如函数或对象)。

    下面的例子中,bar.js 使用了导出 Square 类的 square 模块:

    1. const Square = require('./square.js');
    2. const mySquare = new Square(2);
    3. console.log(`mySquare 的面积是 ${mySquare.area()}`);

    square 模块定义在 square.js 中:

    1. // 赋值给 `exports` 不会修改模块,必须使用 `module.exports`。
    2. module.exports = class Square {
    3. constructor(width) {
    4. this.width = width;
    5. }
    6. area() {
    7. return this.width ** 2;
    8. }
    9. };

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