CommonJS 模块
本课属于 Coddy Node.js 学习旅程的“Node.js 基础”单元。第 10 课,共 33 课。
你会在 npm 包和较早的教程中读到许多使用另一种模块系统的 Node 代码。
CommonJS 使用 module.exports 导出,并使用 require 导入。以 .cjs 结尾的文件始终是 CommonJS 文件,不受项目其他部分所用模块系统的影响;导入这类文件时,会将它的 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 使用 CommonJS 方式编写,采用 module.exports。在你的 notes.js 中使用它,添加一个 stats 命令。
- 在
legacy/stats.cjs中,完成countWords(notes)。它接收一个由笔记组成的数组,并返回所有笔记中的单词总数。单词之间用空格分隔。对于最初的三条笔记,Buy milk、Call Ada和Water the plants,它会返回7。对于空数组,它会返回0。 - 在
notes.js中,使用import stats from './legacy/stats.cjs'导入该文件。它是一个 CommonJS 文件,因此stats是它的module.exports对象,而函数是stats.countWords。 - 在命令链中、最后一个
else之前添加一个stats命令。它会打印一行内容:笔记数量,然后是单词数量。3 notes, 7 wordswhere和其他命令仍然可以正常使用。
试试看:在 $ 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 在线编辑器