当前位置: 首页 > article >正文

CommonJS 和 ES modules

CommonJS 和 ES modules (ESM) 是两种不同的模块系统,它们用于组织 JavaScript 代码,并允许不同文件之间共享代码。

CommonJS (CJS)

CommonJS 是最早的 JavaScript 模块化规范之一,主要用于 Node.js 环境中。CommonJS 规定每个文件都是一个模块,拥有独立的作用域。模块导出成员的方式是通过 exports 对象,通常会看到如下的模式:

// 导出模块成员
module.exports = {
    someFunction: function() {
        // 函数实现
    }
}

// 或者简写形式
exports.someFunction = function() {
    // 函数实现
}

然后在其他模块中导入这些成员:

const myModule = require('./path/to/module');
myModule.someFunction();

require 是一个同步操作,意味着在 require 调用时,整个模块会被加载完毕并准备好使用。

ES modules (ESM)

ES modules 是 ECMAScript 标准的一部分,自 ECMAScript 2015 (ES6) 开始引入。它们提供了一种更现代的方法来导入和导出模块成员。ESM 使用 importexport 关键字来定义模块接口:

// 导出模块成员
export const someFunction = () => {
    // 函数实现
};

// 在另一个文件中导入
import { someFunction } from './path/to/module';
someFunction();

ES modules 支持静态分析,因此导入可以在编译时进行优化。它们也支持动态导入 (import() 表达式),这是一种异步操作,可以延迟加载模块直到需要它们的时候。

CJS vs ESM

  • 互操作性:Node.js 支持两种模块系统的互操作性,意味着您可以在同一个项目中混合使用 CJS 和 ESM。
  • 语法差异:CJS 使用 require,而 ESM 使用 import/export
  • 异步加载:虽然 CJS 的 require 是同步的,但 ESM 可以使用 import() 动态导入模块,这是异步的。
  • 模块加载:ESM 在加载时会先解析所有依赖项,然后再执行模块中的代码;而 CJS 是按顺序执行,并立即可用。

为了在 Node.js 中使用 ESM,您需要在文件名后缀使用 .mjs 或者在 package.json 文件中指定 "type": "module"

希望这能帮助您理解 CommonJS 和 ES modules 之间的区别。如果您有更多关于这两种模块系统的问题,欢迎继续提问!


http://www.kler.cn/news/359912.html

相关文章:

  • vector和list
  • 基于AIACC加速器快速实现LLaMA-7B指令微调
  • 写好英文邮件的技巧,如何结构化表达?
  • OpenLayers:用于在 web 应用程序中创建互动地图
  • 阿里巴巴达摩院|Chain of Ideas: 利用大型语言模型代理革新新颖创意开发的研究
  • Python Flask 接收前端上传的图片
  • C++11 thread,mutex,condition_variable,atomic,原子操作CAS,智能指针线程安全,单例模式最简单实现方式
  • Redis 数据类型Streams
  • performance.timing
  • OpenCV坐标系统与图像处理案例
  • ActivationType, Pool, ModelType(helpers文件中的classes.py)
  • vuetify学习笔记(v-app和v-responsive)
  • 【算法】---栈与队列基础
  • 基于微信小程序的电影交流平台
  • RHCE作业1
  • QT模块--GUI和QtWidgets
  • Rust语言编程环境的安装
  • Codeforces Round 980 (Div. 2) A ~ D
  • 小程序将图片转换成base64格式
  • Mysql-事务(Transaction)详解