现代浏览器对 es模块 【esm】原生支持/浏览器不支持cjs 的原因

这篇具有很好参考价值的文章主要介绍了现代浏览器对 es模块 【esm】原生支持/浏览器不支持cjs 的原因。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

现代浏览器对 ES(ECMAScript)模块的原生支持是指浏览器可以直接解析和执行 JavaScript 文件中的 ES 模块语法,无需额外的工具或转换。

具体来说,当浏览器遇到 importexport 关键字时,会将其识别为 ES 模块语法,而不是传统的 <script> 标签中的全局作用域。浏览器会根据 import 语句的路径加载对应的模块文件,并将导出的变量、函数或对象等绑定到当前模块的作用域中,供其他模块使用。

ES 模块的原生支持使得开发者可以更方便地组织和管理 JavaScript 代码,避免了传统的全局命名空间污染和脚本加载顺序的问题。此外,ES 模块还具有更好的静态分析特性,使得浏览器可以更好地进行代码优化和加载性能的优化。

需要注意的是,虽然现代浏览器已经原生支持 ES 模块,但对于一些旧版本的浏览器,特别是 Internet Explorer,可能不支持 ES 模块或仅部分支持。因此,在开发时需要考虑浏览器的兼容性,并根据实际情况进行代码转换或提供备用方案。

我们在实际应用中只需要在  <script>  标签上加上一个 type="module" 就可以使用,参考这篇文章。

还需要注意,ES 模块具有动态导入的能力,所以在代码中引入 ES 模块,可以动态的加载新的模块。

知道了这个知识点,我们在看 vite 官网的时候就很好理解了。

浏览器为什么不支持 cjs

  1. 同步加载 vs. 异步加载: CommonJS 模块是同步加载的,这意味着当一个模块被引入时,会立即执行并阻塞后续代码的执行,直到该模块加载完成。而在浏览器中,更倾向于采用异步加载的模块系统,以避免阻塞页面渲染和用户交互。

  2. 环境差异: 浏览器的运行环境和 Node.js 环境有很大的差异,包括文件系统、网络访问、全局对象等。CommonJS 在设计上与 Node.js 紧密集成,涉及了许多 Node.js 特有的功能和 API,这些在浏览器中并不存在,因此无法直接在浏览器中运行 CommonJS 模块。

  3. 加载方式: 浏览器采用的是 HTTP 协议来加载资源,而 Node.js 则可以直接在本地文件系统中加载模块。这导致了在浏览器环境下无法像在 Node.js 中那样直接引入 CommonJS 模块。

  4. 性能和安全性考量: CommonJS 的同步加载方式可能会导致性能问题,尤其是在大型的 Web 应用中。此外,CommonJS 的模块系统设计上存在一些安全隐患,比如模块的全局状态共享等,这在浏览器环境下可能会引发一些问题。文章来源地址https://www.toymoban.com/news/detail-854271.html

所以 node 支持 cjs ,浏览器不支持,所以在 esm 出来之前,webpack 回把 cjs 会打包成立即执行函数给浏览器使用

到了这里,关于现代浏览器对 es模块 【esm】原生支持/浏览器不支持cjs 的原因的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 118.浏览器支持和修复Safari浏览器的Flexbox漏洞

    在我们之前的文章中,我们介绍了测试的步骤 虽然现在大部分新版本的浏览器都能支持99%的CSS属性,但是不排除的是仍然有一些用户使用老的IE浏览器或者版本较低的浏览器去浏览我们的网页,这样我们的网站可能无法按照我们的预期工作; ● 我们可以使用工具去检测浏览

    2024年02月12日
    浏览(54)
  • Flutter如何支持浏览器跨域

    当使用 flutter 构建 web 项目,直接运行在 chrome 浏览器发出网络请求会发生跨域错误  strict-origin-when-cross-origin(CROS) ,比如在 dart 代码直接用  dio.get(\\\"https://www.yunfuit.com\\\") ,dio 会报错,在 chrome 的 DevTools 中会发现 CROS 错误。 解决办法: 在 flutterbincache 删除 flutter_tools.stamp

    2024年02月17日
    浏览(37)
  • 云原生之使用Docker部署Firefox浏览器

    Firefox是一款免费开源的网页浏览器,由Mozilla基金会开发和维护。它是第一个成功挑战微软Internet Explorer浏览器垄断地位的浏览器之一。Firefox浏览器因其稳定性、安全性、速度快、扩展性强、用户体验优秀,而备受欢迎。 开源免费:Firefox浏览器完全免费,是开源软件,任何人

    2024年02月16日
    浏览(41)
  • Python控制浏览器——selenium模块

    【1】安装selenium 如果安装慢可以指定用国内源 【2】安装浏览器驱动 Chrome驱动地址:[http://chromedriver.storage.googleapis.com/index.html] Edge驱动安装地址:[https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/?form=MA13LH] Firefox驱动安装地址:[https://github.com/mozilla/geckodriver/releases] 安装成

    2024年04月10日
    浏览(44)
  • 支持XP系统的最新firefox浏览器

    都2024年了,还XP系统?事情是这样的,我要维护一下非常老的项目,系统部署在windows server 2003下面。升级系统是不太可能了。只能在老系统上维护,老的系统上自带的IE 6.0浏览器,在当前几乎是不可用状态,甚至百度都无法使用了。于是我就想安装一个至少可以访问大部分网

    2024年01月20日
    浏览(60)
  • es+kibana:部署成功但浏览器无法访问

    解决方法:如果实在没有办法了,删除创建的容器es和kibana,包括创建的网络es-net!!! 一定要删除网络,然后再重新创建!!! 创建网络: 创建es容器: 访问es容器成功:   创建kibana 访问kibana成功:   安装ik 第一步:查看数据卷目录 安装插件需要知道elasticsearch的plugin

    2024年02月11日
    浏览(50)
  • ES6的语法兼容IE浏览器

    这段代码在IE浏览器中可能会报错,因为箭头函数、模板字符串以及模板字符串中的变量插入是ES6的语法,旧版本的IE浏览器不支持。 为了解决这个问题,你可以将箭头函数改写为普通的匿名函数,将模板字符串改为字符串拼接的方式。请尝试以下修改: 以上修改后的代码应

    2024年02月14日
    浏览(61)
  • 微软 Edge 浏览器目前无法支持 avif 格式

    avif 格式在微软 Edge 浏览器中还是没有办法支持。 如果你希望能够查看 avif 格式,那么只能通过浏览器打开,然后浏览器将会把这个文件格式下载到本地。 avif 格式已经在其他的浏览器上得到了广泛的支持,目前不支持的可能就只有 Edge 浏览器。 在网络上有关这个问题的讨论

    2024年02月04日
    浏览(78)
  • 【搭建WebDAV服务手机ES文件浏览器远程访问】

    有时候我们想通过移动设备访问群晖NAS 中的文件,以满足特殊需求,我们在群辉中开启WebDav服务,结合cpolar内网工具生成的公网地址,通过移动客户端ES文件浏览器即可实现移动设备远程访问NAS文件,下面介绍步骤 在群晖套件中心,我们搜索 webdav ,找到且点击安装套件(如已安装可以

    2024年02月12日
    浏览(38)
  • 搭建WebDAV服务手机ES文件浏览器远程访问

    有时候我们想通过移动设备访问群晖NAS 中的文件,以满足特殊需求,我们在群辉中开启WebDav服务,结合cpolar内网工具生成的公网地址,通过移动客户端ES文件浏览器即可实现移动设备远程访问NAS文件,下面介绍步骤 在群晖套件中心,我们搜索 webdav ,找到且点击安装套件(如已安装可以

    2024年02月12日
    浏览(40)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包