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.
このエントリーをはてなブックマークに追加
にほんブログ村 IT技術ブログへ

関連コンテンツ

スポンサードリンク

コメント

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です