天天看點

nodejs的子產品加載機制

子產品簡介

在nodejs子產品系統中,每個檔案都可以看做單獨的子產品,子產品通過向module.exports對象添加屬性來導出,或者将module.exports指向新的對象或函數來導出。通常我們會向exports添加屬性來導出,其實exports是指向module.exports的一個友善書寫的變量,nodejs最後導出的是module.exports。

子產品通過向module.exports對象添加屬性來導出的例子:

foo.js:

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

circle.js:

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

circle.js子產品導出了area函數和circumference函數,foo.js引用了circle.js子產品,将circle.js子產品指派給circle變量,此時circle變量便指向了circle.js的module.exports對象,便能使用該對象上的area函數和circumference函數。

将module.exports指向新的對象或函數來導出的例子:

bar.js

const Square = require('./square.js');
const mySquare = new Square(2);
console.log(`The area of mySquare is ${mySquare.area()}`);
           

square.js

module.exports = class Square {
  constructor(width) {
    this.width = width;
  }

  area() {
    return this.width ** 2;
  }
};
           

這裡不能将class Square指派給exports,因為nodejs最終導出的對象是module.exports,如果指派給exports隻是改變了exports變量的指向,module.exports還是指向原對象。

繼續閱讀