子產品簡介
在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還是指向原對象。