module.exports
导出内容,用
require
函数引入模块。
Common.js 是一种模块系统规范,主要用于在服务器端 JavaScript 环境中使用,它允许开发者将代码拆分成多个模块,每个模块可以独立开发、测试和维护,然后通过 require 函数引入到其他模块中,以下是关于 Common.js 的详细解释:
1、模块: 一个模块是一个逻辑上分离的代码块,通常存在于单独的文件中,模块可以是任何 JavaScript 文件,包含函数、对象或原始值。
2、
module.exports
对象来导出公共 API,这使得其他程序可以通过require
方法访问这些 API。
3、
require
方法用于导入模块,当调用require('module_name')
时,它会执行指定的模块,并返回该模块的module.exports
属性。
4、缓存: Node.js 会缓存所有被导入的模块,这意味着每个模块在整个应用程序生命周期中只会被加载和编译一次,后续的require
调用将直接从缓存中获取。
5、同步加载: Common.js 模块默认是同步加载的,这意味着在继续执行脚本之前,必须完全加载和解析模块。
// mathModule.js module.exports = { add: function(a, b) { return a + b; }, subtract: function(a, b) { return a b; } }; // main.js const math = require('./mathModule'); console.log(math.add(5, 3)); // 输出: 8 console.log(math.subtract(5, 3)); // 输出: 2
在上面的例子中,mathModule.js
定义了一个简单的数学模块,并通过module.exports
导出,然后在main.js
文件中,我们使用require
函数导入这个模块,并调用其方法。
模块化: 促进代码的重用和组织。
简单性: 易于理解和使用。
性能: 由于模块缓存机制,重复导入的性能开销很小。
同步加载: 可能导致阻塞事件循环,尤其是在加载大型模块时。
全局作用域被墙: 所有模块共享同一个全局命名空间,可能会引起冲突。
Q1: Common.js 是否只能在服务器端使用?
A1: 虽然 Common.js 最初是为服务器端 JavaScript 设计的,但它也可以在浏览器中使用,通常是通过构建工具(如 Webpack)将 Common.js 模块打包为浏览器可识别的格式。
Q2: Common.js 与 ES6 模块有什么区别?
A2: Common.js 是 Node.js 早期采用的模块系统,而 ES6 模块是后来加入 ECMAScript 标准中的模块系统,两者的主要区别在于语法和一些特性,ES6 模块支持静态导入/导出语句,而 Common.js 则依赖于对象和函数,ES6 模块设计为异步加载,不会阻塞主线程。