import

本文为学习笔记,原文为张鑫旭大神的博客 原文地址

静态import


// export一个改变

元素颜色的方法 export function pColor (color) { const p = document.querySelector('p'); p.style.color = color; }

模块文件一般的后缀为mjs,与一般js文件区分开来,用js也可以,但是node.js中模块化特性只支持mjs。
在浏览器侧进行import模块引入,其对模块JS文件的mime type要求非常严格,务必和JS文件一致。这就导致,如果我们使用.mjs文件格式,则需要在服务器配置mime type类型,否则会报错.为application/javascript。

用nomodule实现向下兼容

对于不支持ES6的浏览器可以解决问题
但是还是会去请求mjs,但是不影响功能,只不过会多耗费流量。



一些静态的import的细节

  1. 目前import不支持裸露的说明符
    import {foo} from 'bar.mjs'; import {foo} from 'utils/bar.mjs';不行
import {foo} from '/utils/bar.mjs';
import {foo} from './bar.mjs';
import {foo} from '../bar.mjs';//可以
  1. 默认Defer行为
    module默认defer
    异步加载但是又保证顺序





  1. 内联script同样defer特性
    内联script是没有defer的概念的,所以加了defer属性的内联script可以直接忽视defer属性
  2. 支持async
    async为异步,与defer类似,但是不保证顺序,谁先加载完谁先执行。
  3. 模块只会执行一次
    传统script引入多次就会调用多次
    模块引入多次只会调用一次
  4. 总是CORS跨域
    不能直接跨域,需要在服务端配置Access-Control-Allow-Origin,可以指定具体域名,或者直接使用通配符,Access-Control-Allow-Origin:
  5. 无凭证
    这边不太理解
  6. 天然严格模式
    import的JS模块代码天然严格模式,如果里面有不太友好的代码会报错,

动态import

语法为:
import(moduleSpecifier);
和静态import一样不能是裸露的地址。
import()返回一个promise

你可能感兴趣的:(import)