zoukankan      html  css  js  c++  java
  • 前端web模块化开发之ESModules

    模块化标准规范

    前端模块化规范经过不断的迭代更新,目前算是统一成了NodeJS环境下的CommonJS和浏览器环境下的ES Modules
    
    ES Modules是ECMAScript 2015(ES6)才出现的标准,所有其中必然是存在各种各样的兼容性问题,那么我们就不建议使用ES Modules?不,当然不是,经过webpack等一系列打包工具的流行,ES Modules现在已经得到普及,可以说是最主流的前端模块化方案了,相比于AMD这社区提出来开发的规范,ES Modules是语言层面实现的模块化,更加完善,也得到绝大多数浏览器的支持
    

    ES Modules在浏览器环境下的使用

    浏览器环境下使用ES Modules,可以通过在script标签中加入`type="module"`的方式来使这个script标签中的内容成为一个模块,可以以ES Module的标准执行其中的代码
    
    ```html
    <script type="module">
        console.log("this is a es module")
    </script>
    ```
    

    ES Modules基础特性

    1. 自动采用严格模式,忽略'use strict'

    2. 每个ES Module 都是运行在单独的私有作用域中,在module1中定义的变量不能直接在module2中使用,需要通过导出和导入操作,这样做的好处是不用但心模块中的变量在全局作用域中的污染

    3. ESM是通过CORS的方式请求外部JS模块的,不支持CORS的路径是不能访问的,会报跨域错误

      <script type="module" src="https://libs.baidu.com/jquery/2.0.0/jquery.min.js"></script>
      

      上面引入的外部文件是不支持CORS的,所有浏览器会报如下信息,提示产生跨域:

      支持CORS的路径是不会报出此错误的:

      <script type="module" src="https://unpkg.com/jquery@3.4.1/dist/jquery.min.js"></script>
      

      在浏览器控制台的Sources中是可以找到此引入的:

      因为CORS不支持文件的方式访问,所以要在http server环境下访问,这个内容就不再过多赘述了,因为在实际开发中肯定都是在http server环境下进行开发的

    4. ESM的Script标签会自动延迟执行脚本,等同于Scrip标签中deffer属性,这样会使模块在页面加载完成后才会执行

  • 相关阅读:
    sessionstorage中存储JSON数据
    JS + Canvas画图Demo
    JavaWeb中实现通过邮箱找回密码
    javaWeb实现验证码--代码超简单
    maven的下载、安装及配置
    web端百度地图API实现实时轨迹动态展现
    java存储数据到本地txt文件中
    java读取地址数据文件
    在服务器的tomcat中部署手机apk项目,浏览器或手机下载不能根据URL下载和安装apk文件
    虚拟机类加载机制
  • 原文地址:https://www.cnblogs.com/MissSage/p/14963162.html
Copyright © 2011-2022 走看看