Node.jsのモジュール化を使って、別ファイルにあるプログラムをコールする
Node.jsではモジュール化(exports)を使ってファイルを分割することができます。使い方を色々試してみたのでメモ。
なお、本記事のサンプルは全てapp.js
からexports.js
を利用する場合になります。
単一の関数
exports.js
exports.export_print = () => {
console.log("exec print1");
}
app.js
const export_function = require('./exports.js');
export_function.export_print();
または
const { export_print } = require('./exports.js');
export_print();
分割代入時は元と同じ関数名にしないといけない
実行結果
>node app.js
exec print1
複数の関数
exports.js
exports.export_print = () => {
console.log("exec print1");
}
exports.export_print2 = () => {
console.log("exec print2");
}
app.js
const export_function = require('./exports.js');
export_function.export_print();
export_function.export_print2();
または
const { export_print, export_print2 } = require('./exports.js');
export_print();
export_print2();
実行結果
>node app.js
exec print1
exec print2
クラス
exports.js
class ExportClass {
init() {
console.log("init");
}
}
module.exports = ExportClass;
app.js
require('./exports.js')
の代入変数名はなんでもよい。
const Exports = require('./exports.js');
let exportClass = new Exports();
exportClass.init();
実行結果
>node app.js
init
関数+クラス
exports.js
exports.export_print = () => {
console.log("exec print1");
}
class ExportClass {
init() {
console.log("init");
}
}
exports.ExportClass = ExportClass;
app.js
require('./exports.js')
を分割代入するので同じ名前にしないといけない。
const { export_print, ExportClass } = require('./exports.js');
let exportClass = new ExportClass();
export_print();
exportClass.init();
または
const Exports = require('./exports.js');
Exports.export_print();
let exportClass = new Exports.ExportClass();
exportClass.init();
実行結果
>node app.js
exec print1
init
注意点
exports.名称 = クラス名;
でエクスポートしている場合、次のコードはエラーになる。
const 名称 = require('./exports.js');
let exportClass = new 名称(); // エラー
分割代入か、名前空間を使用してクラスを指定する。
const { 名称 } = require('./exports.js');
let exportClass = new 名称(); // OK.
const 変数名 = require('./exports.js');
let exportClass = new 変数名.名称(); // OK.