CommonJSモジュール
CoddyのNode.jsジャーニー「Node.jsの基礎」セクションの一部。レッスン 9/24。
npm パッケージや古いチュートリアルで読む Node のコードの多くは、別のモジュールシステムを使っています。
CommonJS では、module.exports でエクスポートし、require でインポートします。Node は、.cjs で終わるファイルでは引き続きこの方式で実行し、そのようなファイルを import すると、module.exports オブジェクトがデフォルトとして渡されます。
// greet.cjs
function hello(name) {
return 'Hello, ' + name;
}
module.exports = { hello };
// app.js
import greet from './greet.cjs';
console.log(greet.hello('Ada'));exports は最初、module.exports と同じオブジェクトを指しています。exports.hello = hello はそのオブジェクトに追加します。一方、exports = { hello } は変数を置き換えるため、インポート側には空のオブジェクトが渡されます。
チャレンジ
簡単legacy/stats.cjsのcountWords(notes)を完成させます。ノート全体に含まれる単語数を数えます。import stats from './legacy/stats.cjs'を使ってnotes.jsにインポートします。statsコマンドを実行すると、3 notes, 7 wordsと表示されます。
node notes.js stats を実行します。次に、ノートを add してから、もう一度 stats を実行します。まだ何も保存されていないため、3 のままです。
自分で試してみよう
// CommonJS方式で書かれた古いモジュール。
function countWords(notes) {
// すべてのnotesに含まれる単語の合計数を返す。
return 0;
}
module.exports = { countWords };