Module ES6

作者: jingqian_xi | 来源:发表于2017-09-15 14:33 被阅读0次

介绍

在ES6之前社区定制了一些模块加载方案,主要有CommonJS和AMD两个,CommonJS用于服务器,而AMD用于浏览器,ES6的出现可以成为通用方案。ES6的模块设计思想是尽量静态化,在编译时就可以确定模块的依赖关系以及输入和输出的变量。模块功能主要由export和import两个命令构成

相关名词解释

  • 运行时加载。它的模块就是对象,输入时查找对象属性
let {a, b, c} = require('common')

解析:上面的代码运行是整体加载common模块,然后使用a,b,c三个方法,这样的加载方式叫做运行时加载

  • 编译时加载
import {a, b, c} from 'common'

解析:从common模块加载a,b,c三个模块,其他不加载,这种方式叫做编译时加载

export和import

  • export规定模块的对外接口,import用于输入其他模块提供的功能。
  • export和import的基本语法
    • export {a, b, c} 对应 import {a, b, c} from './lib'
    // lib.js
    const a = () => { //... }
    const b = 123
    const c = {list: []}
    export {a, b, c}
    
    // module.js
    import {a, b, c} from './lib'
    console.log(a)
    
    • export {a as sum} 对应 import {sum} from './lib' 通过as重命名
    // lib.js
    const a = (a, b) => { return a + b}
    export {a as sum}
    
    // module.js
    import {sum} from './lib'
    console.log(sum(10, 5))
    
    • export const a = 5 对应 import {a} from './lib' 直接命名导出
    // lib.js
    export const a = 5
    
    // module.js
    import {a} from './lib'
    console.log(a)
    
    • export default 对应 import a from './lib' 默认导出,倒入不需要知道具体变量名
    // lib.js
    const a = (a, b) => {return a + b}
    export default a
    
    // module.js 这里不用{}包裹哦
    import a from './lib'
    console.log(a(10, 5))
    
    • export * from './other' 对应 import {a} from './lib' 使用通配符重新倒出其他模块接口
    // other.js
    export a = 12
    export b = () => {//...}
    
    // lib.js
    export * from './other'
    
    // module.js
    import {a} from './lib'
    console.log(a)
    
  • 特殊写法
    • export {a as default} from './lib'
      从lib模块倒入a变量并且作为默认倒出
    // 上面的写法等同于
    import {a} from './lib'
    export default a
    
    • export {a as b} from './lib'
      输出lib模块的a并且改名为b

ES6模块加载的实质

ES6模块输出的是值的引用(根据简单数据类型和引用类型的特点来理解这个问题比较容易),当他遇到import时不是去执行模块而是生成一个引用,等到执行到这里再到模块中去拿。

🌰说明

// lib.js
export let num = 0
export function sum () {
  num++
}
// main.js
import {num, sum} from './lib.js'
console.log(num) // 0
sum()
console.log(num) // 1

相关文章

  • 前端模块化:ES6,CommonJS

    前端模块化 共有四种规范 ES6 Module CommonJS AMD CMD ES6 Module ES6模块...

  • 模块(一) CommonJs,AMD, CMD, UMD

    系列文章导航 模块(二) es6 module typescript module 本文参考Javascript模...

  • js之模块化(3)

    随着ES6 Module的出现,我们在项目中也大概率的采用了ES6 Module的写法,主要是采用import 和...

  • ES6语法

    ES6 Module 在 ES6 Module出现之前,有3种模块化方案 AMD 浏览器端 CMD 服务器端 Co...

  • 2020-04-22

    分类: es6: import / exportcommonjs: require / module.export...

  • CommonJs模块规范中module.exports和expo

    之前简单总结过ES6中的export/import模块规范(ES6中的export/import module 基...

  • 学习webpack【第三章-核心概念2】

    一、Hot Module Replacement 热模块替换 二、使用babel处理ES6 ———————————...

  • 2020-04-16

    #ES6中的两个导出 1、export页面引用时候imprt {module1,module2} from 'xx...

  • webpack-02

    解析ES6和ReactJSX 解析ES6使用的是babel-loader,我们首先需要做在module的rules...

  • BigNumber 讲解

    安装 Browser: Node.js: ES6 module (bignumber.mjs): AMD load...

网友评论

    本文标题:Module ES6

    本文链接:https://www.haomeiwen.com/subject/zssjsxtx.html