Node.jsモジュール:ベストプラクティス - 複数のmodule.exportsを宣言する場合
Node.jsで複数のmodule.exportsを宣言する方法
複数の方法
- オブジェクトリテラル:
module.exports = {
add: (a, b) => a + b,
subtract: (a, b) => a - b,
};
- 個別にプロパティを割り当てる:
module.exports.add = (a, b) => a + b;
module.exports.subtract = (a, b) => a - b;
- exports オブジェクトを使う:
const exports = module.exports;
exports.add = (a, b) => a + b;
exports.subtract = (a, b) => a - b;
- ES6モジュール:
export function add(a, b) {
return a + b;
}
export function subtract(a, b) {
return a - b;
}
注意点
- 1つのファイルで複数のデフォルトエクスポートはできません。
- オブジェクトリテラル形式を使うと、キー名でエクスポートされた関数を呼び出すことができます。
exports
オブジェクトを使うと、module.exports
と同じプロパティを指しますが、ES6モジュールでは推奨されません。- ES6モジュールを使う場合は、
export
キーワードを使って関数をエクスポートします。
math.js
// オブジェクトリテラル形式
module.exports = {
add: (a, b) => a + b,
subtract: (a, b) => a - b,
multiply: (a, b) => a * b,
divide: (a, b) => a / b,
};
index.js
// math.js をインポート
const math = require('./math');
// インポートした関数を呼び出す
console.log(math.add(1, 2)); // 3
console.log(math.subtract(4, 2)); // 2
console.log(math.multiply(3, 4)); // 12
console.log(math.divide(10, 2)); // 5
実行結果
3
2
12
5
複数のmodule.exportsを宣言するその他の方法
クラスを使う
class Math {
add(a, b) {
return a + b;
}
subtract(a, b) {
return a - b;
}
multiply(a, b) {
return a * b;
}
divide(a, b) {
return a / b;
}
}
module.exports = new Math();
関数を使う
function add(a, b) {
return a + b;
}
function subtract(a, b) {
return a - b;
}
function multiply(a, b) {
return a * b;
}
function divide(a, b) {
return a / b;
}
module.exports = {
add,
subtract,
multiply,
divide,
};
名前空間を使う
const math = {
add: (a, b) => a + b,
subtract: (a, b) => a - b,
multiply: (a, b) => a * b,
divide: (a, b) => a / b,
};
module.exports = math;
デフォルトエクスポートを使う
export default {
add: (a, b) => a + b,
subtract: (a, b) => a - b,
multiply: (a, b) => a * b,
divide: (a, b) => a / b,
};
- クラスや関数を使う場合は、new 演算子や関数呼び出しが必要になります。
- 名前空間を使う場合は、
module.exports
にオブジェクトを直接割り当てる必要があります。 - デフォルトエクスポートは1つしか使用できません。
node.js module