【webpack学习笔记—2】ES6模块打包标准

前言

前端本没有模块化,但是随着前端工程的发展,各个文件间的关系越来越多,为了能彼此方便地引用,慢慢地便有了模块化,这里的一个文件可以理解为一个模块。
打包就是为了让前端工程化,分离代码间的作用域。导出就是将本模块对外暴露,导入就是引入其他模块来使用其方法等。
ES6 Module是2015年引入的标准,让JS正式具备模块的概念。
ES6 Module的关键点是使用default一个关键字,importexport两个保留字实现模块的导入导出。

1. ES6 Module的导出

导出方式有2种,一个是命名导出,一个是默认导出,二者可以混用。

1.1 命名导出

命名导出可以选择直接和变量声明写在一起,也可以选择最后统一导出,两种写法效果一样。

// 第一种写法
export const name = 'sam'
export const sex = 'man'
// 第二种写法
const name = 'sam'
const sex = 'man'
export { name, sex as sexual } // 在导入时变为 name 和 sexual,此时的sex作废

补充小知识: 用命名导出第二种写法导出时,还可以使用as关键字对导出的变量或方法等重命名,让其在导入时使用as重命名过的名称。(其实导出也可以用它重命名,后面会提到)

1.2 默认导出

默认导出可以理解为==输出一个default变量==,所以无需再次声明变量,直接导出即可

export default {
    name : 'sam',
    sex : 'man'
}
// 也可以直接导出字符串
export default "This is sam !"
// 直接导出类
export default class() {...}
// 直接导出匿名函数
export default function() {...}

补充小知识: 不同于命名导出,默认导出只能有一个,或者说,每个模块只能用默认导出导出一次

2. ES6 Module的导入

因为有两种不同的导出方式,所以主要也就有两种导入方式。

2.1 命名导入的导出

命名导入的方式有三种,当变量较多可以使用整体导入的,结合as还可以在导入时对变量重命名,以下代码展示了三种情况:

// 情况一:
// index.js,命名导出的两种写法都对应这种导入方式
import { name, sex } from './people.js'

// 情况二:
// 导入的所有变量作为属性存放在people对象中,减少了对当前作用域的影响
import * as people from './people.js'

// 情况三:
// 结合使用 as 关键字,还可以对导入的变量重命名
// 使用的时候就变成name和sexual
import { name, sex as sexual } from './people.js' 

补充知识点: 使用大括号导入的变量需要和导出时的名称保持一致,其效果可以理解为,在当前作用域下声明了这些变量,而且还是只读不可修改的变量。

2.2 默认导入的导出

只有一种方式,直接在import后面跟上变量名,这个变量名可以自定义,其指向被导入模块的默认导出

// people.js
export default {
    name: 'sam',
    sex: 'man'
}
// index.js
import handsomeMan from './people.js'
console.log(handsomeMane.name) // sam

2.3 混合导入

如果既有命名导出,又有默认导出,那么就要像下面这样了:

// people.js
export const name = 'sam'
export default {
    petType: 'dog',
    petName : 'eight'
}

// index.js
import pet, { name } from './people.js'
console.log(pet.petName ) // eight
console.log(name) // sam

补充知识点: 这里pet指向的是该模块的默认导出,name指向的是命名导出,而且这二者导入的顺序不能颠倒,否则会报错。

3. 复合写法

可以将导入的文件立即导出,可以用在比如将全部模块整合导入的入口文件里:

export { name, sex } from './people.js'

但是这种方式==只能用于命名导出==,默认导出只能分两行写:

import people from './people.js'
export default people

4.小结

ES6 Module的导入导出相对CommonJS而言会比较复杂,这里的小节需要好好梳理下:

导出:

  1. ES6 Module的导出方式有两种:命名导出默认导出
  2. 命名导出有2种写法,一个是边声明变量边导出,另一个是先声明变量最后一起导出
  3. 命名导出的过程中可以使用as保留字对变量进行重命名,导入该模块后需要使用重命名后的变量名
  4. 默认导出可以理解为对外导出一个default变量,而且在一个模块中,只能导出一次

导入:

  1. 命名导出的导入使用大括号来导入,导入的变量需要和导出的变量名完全一致,而且导出后的变量是只读的
  2. 命名导出的导入也可以使用as保留字对变量进行重命名
  3. 命名导出的导入还可以使用整体导入的方式, import * as xxx from './xxx.js',导入后的xxx变量名字自定义,且还可以把导入的模块的变量作用域限定在xxx下减少对当前作用域的影响
  4. 默认导出的导入用这种方式import xxx from './xxx.js',其中xxx同样也是可以自定义的
  5. 混合使用导入的方式需要先把默认导入的变量名放在前,命名导入的变量名放在后:import React , { Component } from 'react'
  6. 混合导入写成一行只适用于命名导出,如果是默认导出只能先导入再导出

内容均为我个人阅读《Webpack实战:入门、进阶与调优》后的回忆总结,这是一本很不错的书,想深入了解webpack的同学可以去看看这本书

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,142评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,298评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,068评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,081评论 1 291
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,099评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,071评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,990评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,832评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,274评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,488评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,649评论 1 347
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,378评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,979评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,625评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,796评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,643评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,545评论 2 352

推荐阅读更多精彩内容