当前位置:首页 > 科技  > 软件

JavaScript的大分水岭:CommonJS vs ES模块

来源: 责编: 时间:2023-11-08 09:10:29 387观看
导读所周知,JavaScript社区喜欢进行热烈的辩论。四年来,我们如何组织代码的问题上一直存在一个分歧——这是一个基本但令人意外地有争议的问题,继续将开发者分开。这种分歧围绕着 CommonJS 和 ES 模块,这是两个用于划分 JavaS

kwl28资讯网——每日最新资讯28at.com

所周知,JavaScript社区喜欢进行热烈的辩论。四年来,我们如何组织代码的问题上一直存在一个分歧——这是一个基本但令人意外地有争议的问题,继续将开发者分开。kwl28资讯网——每日最新资讯28at.com

这种分歧围绕着 CommonJS 和 ES 模块,这是两个用于划分 JavaScript代码的主要系统。kwl28资讯网——每日最新资讯28at.com

理解这个分歧

当JavaScript最初被发明时,它的主要角色是作为Web浏览器的脚本语言。但是,随着Node.js的出现,似乎展现出了一系列的可能性。kwl28资讯网——每日最新资讯28at.com

现在,它不仅仅是一个浏览器的语言。它可以为服务器和其他应用程序提供动力。kwl28资讯网——每日最新资讯28at.com

在那种情境下,浏览器中的所有东西都在全局作用域中,你不必过多地考虑模块。但是构建一个复杂的服务器应用程序并不那么简单。你不能把所有的代码都打包在一个文件中——那将是一个噩梦。kwl28资讯网——每日最新资讯28at.com

出现的解决方案?一个叫做CommonJS的模块系统。kwl28资讯网——每日最新资讯28at.com

const moduleA = require('./moduleA');

CommonJS 使用一个叫做 require 的函数,允许你从其他文件中提取 JavaScript并访问从它们导出的函数。kwl28资讯网——每日最新资讯28at.com

然而,JavaScript 很快用ES6——适应了这些想法,以满足Web应用程序的需求。他们引入了import和export。kwl28资讯网——每日最新资讯28at.com

import moduleA from './moduleA';

现在,你可能会纳闷,为什么JavaScript没有坚持已经在使用的require调用呢?kwl28资讯网——每日最新资讯28at.com

require 的问题在于它是同步的,并假设所有文件都已经准备好。但是,在浏览器上下文中,你可能需要等待外部资源时,require的同步性质会让系统崩溃。kwl28资讯网——每日最新资讯28at.com

因此,分裂开始了。kwl28资讯网——每日最新资讯28at.com

兼容性难题

大多数开发者转向ES模块,因为它们不仅是新颖的,而且很有趣。但一个相当大的群体仍然坚持使用CommonJS。这种分裂导致了兼容性问题。kwl28资讯网——每日最新资讯28at.com

如果你在ES模块内部运行,你可以没有问题地导入CommonJS。但是,使用CommonJS导入ES模块是不行的——除非你采用一个模拟导入的异步函数解决方法。kwl28资讯网——每日最新资讯28at.com

const moduleA = await import('./moduleA');

打包器的作用

像Babel或TypeScript这样的打包器或转译器为这个复杂问题增加了另一层,你写的内容取决于你发出的内容。你可以用ES模块写,但发出 CommonJS。kwl28资讯网——每日最新资讯28at.com

// Babel或TypeScript编译器将ES模块转换为CommonJSconst moduleA = require('./moduleA');

如果你在构建的代码中看到 require调用,你就是在发出 CommonJS,而import和export的存在表示你是ES模块的未来的一部分。kwl28资讯网——每日最新资讯28at.com

未来属于ES模块

在吸引了开发者注意的新工具中,bun 是亮点。bun 的主要亮点在于,它已经解决了CommonJS 和 ES 模块之间的互操作性问题。但是,这个修复并不完全符合规范——他们只是为了让它工作而修补了CommonJS和ES模块之间的问题。kwl28资讯网——每日最新资讯28at.com

由于支持这些不同的模块系统,JavaScript工具链可能非常复杂。kwl28资讯网——每日最新资讯28at.com

采用ES模块,你正在简化Web开发。所有的Node.js长期支持版本现在都使用ES模块,这标志着一个明确的海变。kwl28资讯网——每日最新资讯28at.com

尽可能使用ES模块。现在是时候结束这种分裂,拥抱未来了。现代JavaScript,统一的JavaScript。kwl28资讯网——每日最新资讯28at.com

如果你一直在使用或考虑使用 CommonJS,可能是时候仔细看看你的代码了。未来是一个有ES模块的地方,我们每个人都有责任使 JavaScript 的景观变得更加简单和有趣。kwl28资讯网——每日最新资讯28at.com

kwl28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-17641-0.htmlJavaScript的大分水岭:CommonJS vs ES模块

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 探索人工智能的世界:构建智能问答系统之前置篇

下一篇: 必读!SpringBoot接口参数校验N种实用技巧大揭秘

标签:
  • 热门焦点
  • 对标苹果的灵动岛 华为带来实况窗功能

    继苹果的灵动岛之后,华为也在今天正式推出了“实况窗”功能。据今天鸿蒙OS 4.0的现场演示显示,华为的实况窗可以更高效的展现出实时通知,比如锁屏上就能看到外卖、打车、银行
  • 7月安卓手机性价比榜:努比亚+红魔两款新机入榜

    7月登场的新机有努比亚Z50S Pro和红魔8S Pro,除了三星之外目前唯二的两款搭载超频版骁龙8Gen2处理器的产品,而且努比亚和红魔也一贯有着不错的性价比,所以在本次的性价比榜单
  • 六大权益!华为8月服务日开启:手机免费贴膜、维修免人工费

    8月5日消息,一年一度的华为开发者大会2023(Together)日前在松山湖拉开帷幕,与此同时,华为8月服务日也式开启,到店可享六大专属权益。华为用户可在华为商城Ap
  • 十个可以手动编写的 JavaScript 数组 API

    JavaScript 中有很多API,使用得当,会很方便,省力不少。 你知道它的原理吗? 今天这篇文章,我们将对它们进行一次小总结。现在开始吧。1.forEach()forEach()用于遍历数组接收一参
  • Python异步IO编程的进程/线程通信实现

    这篇文章再讲3种方式,同时讲4中进程间通信的方式一、 Python 中线程间通信的实现方式共享变量共享变量是多个线程可以共同访问的变量。在Python中,可以使用threading模块中的L
  • 破圈是B站头上的紧箍咒

    来源 | 光子星球撰文 | 吴坤谚编辑 | 吴先之每年的暑期档都少不了瞄准追剧女孩们的古偶剧集,2021年有优酷的《山河令》,2022年有爱奇艺的《苍兰诀》,今年却轮到小破站抓住了追
  • 2纳米决战2025

    集微网报道 从三强争霸到四雄逐鹿,2nm的厮杀声已然隐约传来。无论是老牌劲旅台积电、三星,还是誓言重回先进制程领先地位的英特尔,甚至初成立不久的新
  • iQOO 11S新品发布会

    iQOO将在7月4日19:00举行新品发布会,推出杭州亚运会电竞赛事官方用机iQOO 11S。
  • 最薄的14英寸游戏笔记本电脑 Alienware X14已可以购买

    2022年1月份在国际消费电子展(CES2022)上首次亮相的Alienware新品——Alienware X14现在已经可以购买了,这款笔记本电脑被誉为世界上最薄的 14 英寸游戏笔
Top