模块可以在浏览器的客户端使用,也可以在 Node.js 的服务器端使用。有时也使用像 Babel 这样的工具将代码从一种模块格式转换为另一种格式。所有这些都使得混乱的 JavaScript 模块状态变得更加混乱。
在Node.js 中支持服务器端的 ES 模块开箱即用,将能够允许全栈开发人员非常自然地为客户端和服务器编写模块化、可重用的 JavaScript 代码。
Node.js 模块
CommonJS 模块
目前Node.js 中模块的事实标准是 CommonJS。 CommonJS 模块在普通的 .js 文件中用 module.exports 进行定义,然后可以用 require() 函数在其他 .js 文件中使用。例如:// foo.js
module.exports = function() {
return 'Hello foo!';
}
// index.js
var foo = require('./foo');
console.log(foo()); // Hello foo!
可以使用 node index.js 命令运行此示例。
ES模块
从Node v8.5开始,开发人员已经能够使用--experimental-modules标志运行对ES模块规范的各种支持了。从Node v12.4开始,模块可以在 .mjs 文件中定义。例如:// foo.mjs
export function foo() {
return 'Hello foo!';
}
// index.mjs
import { foo } from './foo.mjs';
console.log(foo()); // Hello foo!
用 node --experimental-modules index.mjs 命令运行此示例。