ESM和CommonJS详解

server/2024/10/19 11:56:58/

概述

ESMCommonJS 是前端非常常见的两种规范或模块标准,本文将重点讲述这两者的定义、适用范围以及区别。

ESM

ESMECMAScript Modules,是 Javascript 的官方模块化标准,旨在统一 Javascript 的模块化机制。

ESM 的导出和导入
  • 导出:使用 export 关键词导出模块内容,可以是命名导出或默认导出
/** a.js */
export const obj = () => {console.log(5);
};//默认导出
const greet = () => {console.log("Hello World");
};
export default greet;
  • 导入:使用import语法来加载模块
/** b.js */
import greet, { obj } from "../a.js";
特点
  • 异步加载:支持异步加载,适合浏览器环境,与 Javascript 的动态加载功能兼容良好
  • 静态分析:支持静态分析,意味着在编译时可以检查模块的依赖关系,对于优化和工具链支持如tree-shaking很有帮助
  • 浏览器支持:ESM 可以直接在浏览器中使用,只需要写成<script type='module'>即可
  • 严格模式:默认在严格模式下运行

CommonJS

CommonJS是一个 Javascript 模块标准,主要用于 Node.js 环境

模块的导入导出
  • 导出:使用module.exportsexports对象来导出模块内容
/** a.js */
module.exports = () => {console.log("commonjs");
};
  • 导入:使用require()函数来加载模块
/** b.js */
const greet = require("./a.js");
greet();
特点
  • 同步加载:CommonJS 是同步加载的,所以模块正在代码执行时会被即时加载,这可以用SSR
  • 文件系统:CommonJS 模块依赖于 Node.js 的文件系统,因此不适用于浏览器
  • 模块缓存:CommonJS 在第一次加载模块后,会缓存模块导出的结果,因此如果后续加载相同的模块时会使用缓存,避免重复加载

ESMCommonJS对比

ESM使用import加载模块时,必须放在文件的最顶部,而CommonJS使用require则没有这个限制


http://www.ppmy.cn/server/109643.html

相关文章

EasyCVR中的H.265技术:助力实现大规模高效流畅的视频监控应用

随着视频监控技术的不断发展和用户对视频质量要求的不断提高&#xff0c;高效能、低延迟的视频编码技术成为视频监控系统中的重要支撑。TSINGSEE青犀视频旗下的EasyCVR视频汇聚平台凭借其强大的视频处理能力和对H.265技术的支持&#xff0c;在视频监控系统中展现出显著的应用优…

4.2 版本管理器——Entry与事务隔离级别

前言 VM是基于两段锁协议实现调度序列的可串行化&#xff0c;并实现了MVCC以消除读写阻塞。同时也实现了两种隔离级别&#xff0c;所以我们还需要明确版本的概念&#xff1b; DM 层向上层提供了数据项&#xff08;Data Item&#xff09;的概念&#xff0c;VM 通过管理所有的数…

http方法调用接口

调用post方法 public static String doPostWeChat(String accessToken, String url, String tradeCode) throws Exception {// 创建一个默认的 HTTP 客户端实例CloseableHttpClient client HttpClients.createDefault();CloseableHttpResponse response null; // 响应对象初…

PyCharm下载安装教程(详细步骤)附激活码!

PyCharm安装教程 一、软件简介 PyCharm是一款Python IDE&#xff0c;其带有一整套可以帮助用户在使用Python语言开发时提高其效率的工具&#xff0c;比如&#xff0c; 调试、语法高亮、Project管理、代码跳转、智能提示、自动完成、单元测试、版本控制等等。此外&#xff0c;…

资源分享,打开夸克保存文件

这都是我自己的视频和资源&#xff0c;没有版权投诉&#xff0c;别搞了 ai小说推文视频教程 【创绘&#xff1a;一键出片教程】 创绘&#xff1a;一键出片教程_哔哩哔哩_bilibili 前端学习资料 链接&#xff1a;夸克网盘分享

原来食物也可以治病 第一篇

没有健康就没有一切 感冒吃点VC 可以提高免疫力 两种vc对比 吃有机的 (国外) 效果好 因为那个是有机的 不只有vc 还有黄酮 多酚 夏主任的肾病 通过营养 改善好了 我们应该在每天的饮食中摄取各种营养素&#xff0c;为身体服务 颠覆认知病人的实际情况和我想的不同 自…

[Meachines] [Insane] Bankrobber XSS-MDOG+SQLI+XSRF+Local-RCE+Bankv2转账模拟应用缓冲区溢出

信息收集 IP AddressOpening Ports10.10.10.154TCP:80&#xff0c;443&#xff0c;445&#xff0c;3306 $ nmap -p- 10.10.10.154 --min-rate 1000 -sC -sV -Pn PORT STATE SERVICE VERSION 80/tcp open http …

python办公脚本开发学习

功能介绍 此脚本从一个text文件夹中读取一长串文本&#xff0c;其中含有ipv4的地址&#xff0c;然后通过正则将ipv4的地址以数组的形式存储起来。通过与xls表格中的样本数据进行对比&#xff0c;进行过滤&#xff0c;实现功能为&#xff1a;筛选出除了部门为办公领导和生产技术…