初めに
Node.jsではrequireやimportな文法を使って既存のコードの入を行います。
そもそもなぜrequireだけで機能拡張実現できるのかはよく分からないので、今回はモジュールのインポートの流れを整理してみます。
モジュールのインポートの例
先ず、呼べれる関数myfunction.jsを作成します:
function MyFunction() {
console.log('Hello World!');
}
module.exports = MyFunction;
呼ぶ側も作成してみよう:
var MyFunction = require('./myfunction');
MyFunction(); // Hello World!
要するに
モジュールのエクスポート:
module.exports = variable_name;
モジュールのインポート:
var foo = require('module_path');
なぜ'module.exports'だけでできるの
それは、jsファイルがNodeにロードされる前に、Node側はあらかじめmoduleという変数を用意します。
// module変数を用意
var module = {
id: 'myfunction',
exports: {}
};
var load = function (module) {
// 元々のコード:
function MyFunction() {
console.log('Hello World!');
}
module.exports = MyFunction;
return module.exports;
};
var exported = load(module);
// module保存
save(module, exported);
上記のように、Nodeは全てのエクスポートを記載しているmodule変数を保管しているから、他のモジュールに導入の時にmodule変数をチェックすれば機能拡張を実現できます。
終わり
今回はモジュールのエクスポートの流れを整理してみまました。なんかDIっぽい気がします。
ちなみに、今回はCommonJSで整理しましたが、ES6標準に合わせるため、requireではなくて、importを使用した方がいいと思われます。