Menu
CoddyTech

CommonJSモジュール

CoddyのNode.jsジャーニー「Node.jsの基礎」セクションの一部。レッスン 10/33。

npm パッケージや古いチュートリアルで目にする Node のコードの多くは、別のモジュールシステムを使用しています。

CommonJS では、module.exports でエクスポートし、require でインポートします。.cjs で終わるファイルは、プロジェクトのほかの部分で何が使われていても、常に CommonJS です。そのようなファイルを 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 } は変数を置き換えるため、インポートする側には空のオブジェクトが渡されます。

challenge icon

チャレンジ

簡単

古いファイル legacy/stats.cjs は、module.exports を使う CommonJS 方式で書かれています。notes.js からこれを使って、stats コマンドを追加しましょう。

  1. legacy/stats.cjs で、countWords(notes) を完成させましょう。メモの配列を受け取り、すべてのメモに含まれる単語の合計数を返します。単語はスペースで区切られています。最初の3つのメモ、Buy milk、Call Ada、Water the plants に対しては、7 を返します。空の配列に対しては、0 を返します。
  2. notes.js で、import stats from './legacy/stats.cjs' を使ってファイルをインポートします。これは CommonJS ファイルなので、stats はその module.exports オブジェクトであり、関数は stats.countWords です。
  3. 最後の else の前に、処理の連鎖に stats コマンドを追加します。1行で、メモの数に続けて単語数を表示します。
    3 notes, 7 words
    where やほかのコマンドも引き続き動作します。

試してみましょう: $ node notes.js の後の入力欄に stats と入力し、Enter キーを押します。3 notes, 7 words と表示されます。次に add Buy bread と入力し、もう一度 stats と入力します。それでも 3 notes, 7 words と表示されます。プログラムが終了すると、ストアが新しいメモを忘れてしまうためです。

自分で試してみよう

// CommonJS方式で書かれた古いモジュール。
function countWords(notes) {
    // すべてのnotesに含まれる単語の合計数を返す。
    return 0;
}

module.exports = { countWords };

Node.jsの基礎のすべてのレッスン

自分で練習してみよう: Expressプレイグラウンド