模块化 commonJS-AMD-ES6

commonJS(用于服务端)

1.加载方式是同步方式(因为commonJS是从服务端的模块化来的)

2.若模块过大,对于客户端来说,需要通过网络来读取(没那么快),造成白屏时间过长 (对于服务端来说,因为放在本地的,读取时间就是硬盘读取时间,很快)

3.运行时加载

    var math = require('math')
    math.add(1, 2)

 

AMD(用于早期客户端)

1.加载方式是异步方式(回调函数)

2.运行时加载

    require(['math'], function (math) { 
      math.add(1, 2)
    })

 

ES6

1.编译时加载(commonJS、AMD需要整体加载引用的模块,以及模块里的所有方法;ES6只从模块加载引入的方法)

2.ES6因为是编译时加载,import具有提升效果

fn()
import { fn } from './x.js'

3.不能使用表达式、变量、语句

 

 4.多次引入同一个import,只会引入一个

5.通过default暴露出去的只是一个单纯的值,通过命名导出方式(动态绑定的)是一个变量

    let str = '111'
    export default str
    export { str }
    setTimeout(() => {
      str = '222'
    }, 1000)

    import defaultStr, { str } from './x.js'
    setTimeout(() => {
      console.log(str) // 222 变化的
      console.log(defaultStr) // 111 不变化的
    }, 2000)

 

 

存在两种 exports 导出方式:

1.命名导出(每个模块包含任意数量)

// 导出事先定义的特性
export { myFunction, myVariable };

// 导出单个特性(可以导出var,let,
//const,function,class)
export let myVariable = Math.sqrt(2);
export function myFunction() { ... };

 

2.默认导出(每个模块包含一个)

// 导出事先定义的特性作为默认值
export { myFunction as default };

// 导出单个特性作为默认值
export default function () { ... }
export default class { .. }

// 每个导出都覆盖前一个导出
// 文件 test.js
let k; 
export default k = 12;
// 另一个文件 import m from './test'; // 由于 k 是默认导出,所以可以自由使用 import m 替代 import k console.log(m); // 输出为 12

 

posted on 2022-03-15 10:33  sss大辉  阅读(42)  评论(0编辑  收藏  举报

导航