导入
简介
了解本章我们将学习的内容概览。
...
CommonJS 与 ESM
简而言之,本章我们将讨论以下几个核心主题:
- 模块的必要性以及 Node.js 中可用的不同模块系统
- CommonJS 的内部机制与模块模式
- Node.js 中的 ES 模块(ESM)
- CommonJS 与 ESM 之间的差异及互操作性
...
使用 require() 和 module.exports 将所需模块导入 main.js 文件
当 JavaScript 浏览器应用变得越来越复杂,并且 jQuery、Backbone 和 AngularJS 等框架主导了生态系统时,JavaScript 社区开始提出多项倡议,旨在定义一种能够在 JavaScript 项目中有效采用的模块系统。其中最成功的两种是 异步模块定义(AMD),由 RequireJS 推广,以及后来的 通用模块定义(UMD)。
当 Node.js 被创建时,它被设计为一个无需浏览器环境的 JavaScript 服务器运行时,可以直接访问底层文件系统,这为引入一种全新的模块管理方式提供了独特机会。其思路并非依赖 HTML <script> 标签或通过 URL 可访问的资源,而是完全基于本地文件系统中的 JavaScript 文件。为此,Node.js 实现了 CommonJS 规范,该规范旨在为无浏览器环境下的 JavaScript 提供模块系统支持。
1const myModule = (() => { 2 const privateFoo = () => {} 3 const privateBar = [] 4 5 const exported = { 6 publicFoo: () => {}, 7 publicBar: () => {} 8 } 9 10 return exported 11})() // 当此处的括号被解析后,函数将立即执行 12 13console.log(myModule) 14console.log(myModule.privateFoo, myModule.privateBar)
输出结果
1{ publicFoo: [Function: publicFoo], publicBar: [Function: publicBar] } 2undefined undefined