CommonJs规范和ES 模块系统

这篇具有很好参考价值的文章主要介绍了CommonJs规范和ES 模块系统。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、CommonJs规范

CommonJS 是一种模块化规范,用于在 JavaScript 应用程序中组织和管理代码的模块。它定义了模块的导入和导出机制,使得开发者可以将代码分割成可复用的模块,并在不同的文件中引用和使用这些模块。

CommonJS 规范有以下几个主要特点用途

  1. 模块化组织代码:CommonJS 允许将代码按功能或逻辑分类成独立的模块,每个模块只负责特定的功能,使代码更加可维护和可复用。
  2. 隔离命名空间:每个模块都有自己独立的作用域,不会与其他模块中的变量和函数冲突,有效避免命名冲突。
  3. 代码加载管理:CommonJS 规范提供了模块的加载和缓存机制,可以确保模块只会被加载一次,避免重复加载和执行,提高性能。
  4. 跨平台使用:CommonJS 规范不限于在浏览器中使用,也可以在其他 JavaScript 运行环境中使用,如 Node.js 等。

在开发中,我们可以使用 CommonJS 规范来创建和使用模块。下面是一个使用 CommonJS 规范的示例

  1. 创建模块
    假设我们有一个 “math.js” 的模块,用于封装常用的数学函数。我们可以创建一个 “math.js” 文件,并在其中定义我们的模块代码。
// math.js

function add(a, b) {
  return a + b;
}

function subtract(a, b) {
  return a - b;
}

module.exports = {
  add,
  subtract
};

在上述代码中,我们定义了两个函数 addsubtract,并使用 module.exports 将它们导出为模块的接口。

  1. 导入模块
    我们可以在其他文件中导入并使用 “math.js” 模块的代码。
// main.js

const math = require('./math.js');

console.log(math.add(5, 3));  // 输出结果: 8
console.log(math.subtract(10, 4));  // 输出结果: 6

在上述代码中,我们使用 require 函数导入 “math.js” 模块,并将其赋值给 math 变量。然后,我们就可以通过 math 对象使用模块中的函数。

以上就是使用 CommonJS 规范在开发中创建和使用模块的简要示例。通过使用 CommonJS 规范,我们可以更好地组织代码,提高代码的可维护性和可复用性。

二、ES 模块系统

ES 模块系统是 ECMAScript(JavaScript)的官方模块系统。它允许开发者将代码分割为多个模块,并且可以通过导入和导出语法来共享模块之间的代码。

ES 模块系统有以下几个优点

  1. 模块化:ES 模块系统采用了显式的导入和导出语法,可以将代码分割为多个模块,使代码结构更加清晰和可维护。

  2. 作用域:每个模块都有自己的作用域,模块内部的变量和函数不会被外部访问,从而避免了全局命名冲突和污染。

  3. 异步加载:ES 模块系统支持动态导入,可以在需要的时候异步加载模块,提高了应用的性能。

  4. 静态分析:ES 模块系统能够在编译时进行静态分析,使得工具和编译器可以更好地优化代码。

如何使用?

  1. 默认导入和导出

默认导出允许一个模块只导出一个变量、函数或者类,而不需要指定一个具体的名字。可以使用export default语法进行默认导出,其他模块可以通过import语法来导入默认导出的内容。

示例代码中,假设有一个名为math.js的模块,它默认导出了一个计算两个数之和的函数:

// math.js
export default function add(a, b) {
  return a + b;
}

// main.js
import add from './math.js';

console.log(add(2, 3)); // 输出 5
  1. 多个变量或函数的导入导出

在一个模块中,可以导出多个变量或函数,其他模块可以通过import语法导入其中的某个或全部导出的变量或函数。

示例代码中,假设有一个名为math.js的模块,它导出了两个函数addsubtract

// math.js
export function add(a, b) {
  return a + b;
}

export function subtract(a, b) {
  return a - b;
}

// main.js
import { add, subtract } from './math.js';

console.log(add(2, 3)); // 输出 5
console.log(subtract(5, 2)); // 输出 3
  1. 默认和多个变量一起导入导出的情况

在一个模块中,既可以进行默认导出,也可以导出多个变量或函数。其他模块可以通过import语法同时导入默认导出和其他的变量或函数。

示例代码中,假设有一个名为math.js的模块,它默认导出了一个函数add,同时导出了一个函数subtract

// math.js
export default function add(a, b) {
  return a + b;
}

export function subtract(a, b) {
  return a - b;
}

// main.js
import defaultAdd, { subtract } from './math.js';

console.log(defaultAdd(2, 3)); // 输出 5
console.log(subtract(5, 2)); // 输出 3

这样,开发者可以根据需要选择使用默认导入导出、多个变量或函数的导入导出,以满足不同的开发需求。

三、CommonJs规范和ES 模块系统的对比

CommonJS ES 模块系统
常用场景 服务器端、命令行工具、后端开发 前端开发、浏览器环境
引入方式 require() import
导出方式 module.exports export
静态解析 不支持静态解析,只能在运行时加载和解析模块 支持静态解析,可以在编译时进行模块解析
模块的加载方式 同步加载,阻塞执行 异步加载,非阻塞执行
模块的绑定方式 模块加载返回的是一个对象,可以动态地修改和扩展其属性 模块加载返回的是一个只读对象,无法动态修改其属性
循环依赖解决方式 只能通过在运行时检测到循环依赖并返回未完全加载的模块对象来解决 支持动态导入,可以在需要时请求模块的加载,解决循环依赖问题
导入导出的方式是否统一 导入和导出的方式不统一,导入是直接引用整个模块对象,导出是赋值对象上的属性 导入和导出的方式统一,都是通过标准的 import 和 export 关键字来实现
代码的可读性和可维护性 代码可读性较差,需要通过查看模块对象上的属性来确定导入的内容 代码可读性较好,导入导出的部分直观明了,更易于理解和维护
兼容性 在服务器端和命令行工具中广泛使用,但在浏览器端需要依赖额外的打包工具进行转换 浏览器端支持较好,不需要额外的打包工具来进行转换
执行顺序 模块会按照导入的顺序依次加载和执行,但加载和执行是同步的 模块的加载和执行是异步的,执行顺序可以根据依赖关系来确定
动态导入 不支持动态导入,导入的路径必须是静态字符串 支持动态导入,可以在运行时根据条件来决定导入哪些模块

以上是CommonJS规范和ES 模块系统的一些优劣对比。在具体应用中,可以根据场景和需求选择合适的模块系统。文章来源地址https://www.toymoban.com/news/detail-526429.html

到了这里,关于CommonJs规范和ES 模块系统的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • JavaScript:模块化【CommonJS与ES6】

    在 JavaScript 编程中,随着项目的复杂性增加,代码的组织和管理变得至关重要。模块化是一种强大的编程概念,它允许我们将代码划分为独立的模块,提高了可维护性和可扩展性。本文将详细介绍 CommonJS 和 ES6 模块,帮助你理解它们的特点和用法。 1. CommonJS 模块化 CommonJS 是

    2024年02月13日
    浏览(54)
  • elasticsearch(ES)分布式搜索引擎04——(数据聚合,自动补全,数据同步,ES集群)

    **聚合(aggregations)**可以让我们极其方便的实现对数据的统计、分析、运算。例如: 什么品牌的手机最受欢迎? 这些手机的平均价格、最高价格、最低价格? 这些手机每月的销售情况如何? 实现这些统计功能的比数据库的sql要方便的多,而且查询速度非常快,可以实现近

    2024年02月08日
    浏览(51)
  • 前端面试:【前端工程化】CommonJS 与 ES6 模块

    嗨,亲爱的前端开发者!在现代Web开发中,模块化是构建可维护和可扩展应用程序的关键。本文将深入探讨两种主要的JavaScript模块系统:CommonJS 和 ES6 模块,以帮助你了解它们的工作原理、用法以及如何选择合适的模块系统。 1. CommonJS: 用途: CommonJS 是一种模块系统,最初

    2024年02月11日
    浏览(55)
  • Elasticsearch (ES) 搜索引擎: 数据类型、动态映射、多类型(子字段)

    原文链接:https://xiets.blog.csdn.net/article/details/132348634 版权声明:原创文章禁止转载 专栏目录:Elasticsearch 专栏(总目录) ES 映射字段的 数据类型 ,官网文档参考:Field data types。 下面是 ES 常用的一些基本数据类型。 字符串 类型: keyword :类型。 text :文本类型。

    2024年03月23日
    浏览(67)
  • ES搜索引擎入门+最佳实践(九):项目实战(二)--elasticsearch java api 进行数据增删改查

            本篇是这个系列的最后一篇了,在这之前可以先看看前面的内容: ES搜索引擎入门+最佳实践(一)_flame.liu的博客-CSDN博客 ES搜索引擎入门+最佳实践(二)_flame.liu的博客-CSDN博客 ES搜索引擎入门+最佳实践(三)_flame.liu的博客-CSDN博客 ES搜索引擎入门+最佳实践(四)_flame.liu的博客

    2024年02月12日
    浏览(59)
  • 前端框架前置课Node.js学习(1) fs,path,模块化,CommonJS标准,ECMAScript标准,包

    目录 什么是Node.js 定义 作用: 什么是前端工程化 Node.js为何能执行Js fs模块-读写文件 模块 语法: 1.加载fs模块对象 2.写入文件内容 3.读取文件内容 Path模块-路径处理 为什么要使用path模块 语法 URL中的端口号 http模块-创建Web服务 需求 步骤: 案例:浏览时钟 步骤: 什么是模块化 定

    2024年01月16日
    浏览(110)
  • Java SpringBoot API 实现ES(Elasticsearch)搜索引擎的一系列操作(超详细)(模拟数据库操作)

    小编使用的是elasticsearch-7.3.2 基础说明: 启动:进入elasticsearch-7.3.2/bin目录,双击elasticsearch.bat进行启动,当出现一下界面说明,启动成功。也可以访问http://localhost:9200/ 启动ES管理:进入elasticsearch-head-master文件夹,然后进入cmd命令界面,输入npm run start 即可启动。访问http

    2024年02月04日
    浏览(57)
  • 使用Logstash同步mysql数据到Elasticsearch(亲自踩坑)_将mysql中的数据导入es搜索引擎利用logstash(1)

    先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7 深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前! 因此收集整理了一份《2024年最新大数据全套学习资料》,

    2024年04月28日
    浏览(52)
  • 前端10年进化 Node.js、模块化、CommonJS、AMD、CMD、Webpack、Vue-cli、Electron-vue

    模块化的概念在软件开发领域已经存在很长时间,但在 JavaScript 中的模块化发展相对较晚。以下是对您提出的问题的回答: 提出时间:JavaScript 中的模块化概念相对较早地提出于 CommonJS 规范。CommonJS 是一种 JavaScript 模块化规范,最早在 2009 年由 Ryan Dahl 和其他社区成

    2024年02月11日
    浏览(79)
  • ElasticSearch内容分享(四):ES搜索引擎

    目录 ES搜索引擎 1. DSL设置查询条件 1.1 DSL查询分类 1.2 全文检索查询 1.2.1 使用场景 1.2.2 match查询 1.2.3 mulit_match查询 1.3 精准查询 1.3.1 term查询 1.3.2 range查询 1.4 地理坐标查询 1.4.1 矩形范围查询 1.4.2 附近(圆形)查询 1.5 复合查询 1.5.0 复合查询归纳 1.5.1 相关性算分 1.5.2 算分函数查

    2024年02月05日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包