ES6 中 module 備忘清單,你可能知道 module 還可以這樣用!
這是一份備忘單,展示了不同的導(dǎo)出方式和相應(yīng)的導(dǎo)入方式。它實(shí)際上可分為3種類(lèi)型:名稱(chēng),默認(rèn)值和列表 👍
- // 命名導(dǎo)入/導(dǎo)出
- export const name = 'value'
- import { name } from '...'
- // 默認(rèn)導(dǎo)出/導(dǎo)入
- export default 'value'
- import anyName from '...'
- // 重命名導(dǎo)入/導(dǎo)出
- export { name as newName }
- import { newName } from '...'
- // 命名 + 默認(rèn) | Import All
- export const name = 'value'
- export default 'value'
- import * as anyName from '...'
- // 導(dǎo)出列表 + 重命名
- export {
- name1,
- name2 as newName2
- }
- import {
- name1 as newName1,
- newName2
- } from '...'
接下來(lái),我們來(lái)一個(gè)一個(gè)的看🤓
命名方式
這里的關(guān)鍵是要有一個(gè)name。
- export const name = 'value';
- import { name } from 'some-path/file';
- console.log(name); // 'value'
默認(rèn)方式
使用默認(rèn)導(dǎo)出,不需要任何名稱(chēng),所以我們可以隨便命名它👏
- export default 'value'
- import anyName from 'some-path/file'
- console.log(anyName) // 'value'
默認(rèn)方式不用變量名
- export default const name = 'value';
- // 不要試圖給我起個(gè)名字!
命名方式 和 默認(rèn)方式 一起使用命名方式 和 默認(rèn)方式 可以同個(gè)文件中一起使用🤝
- eport const name = 'value'
- eport default 'value'
- import anyName, { name } from 'some-path/file'
導(dǎo)出列表
第三種方式是導(dǎo)出列表(多個(gè))
- const name1 = 'value1'
- const name2 = 'value2'
- export {
- name1,
- name2
- }
- import {name1, name2 } from 'some-path/file'
- console.log(
- name1, // 'value1'
- name2, // 'value2'
- )
需要注意的重要一點(diǎn)是,這些列表不是對(duì)象。它看起來(lái)像對(duì)象,但事實(shí)并非如此。我第一次學(xué)習(xí)模塊時(shí),我也產(chǎn)生了這種困惑。真相是它不是一個(gè)對(duì)象,它是一個(gè)導(dǎo)出列表
- // ❌ Export list ≠ Object
- export {
- name: 'name'
- }
重命名的導(dǎo)出
對(duì)導(dǎo)出名稱(chēng)不滿(mǎn)意?問(wèn)題不大,可以使用as關(guān)鍵字將其重命名。
- const name = 'value'
- export {
- name as newName
- }
- import { newName } from 'some-path/file'
- console.log(newName); // 'value'
- // 原始名稱(chēng)不可訪問(wèn)
- console.log(name); // ❌ undefined
不能將內(nèi)聯(lián)導(dǎo)出與導(dǎo)出列表一起使用
- export const name = 'value'
- // 你已經(jīng)在導(dǎo)出 name ☝️,請(qǐng)勿再導(dǎo)出我
- export {
- name
- }
重命名導(dǎo)入
同樣的規(guī)則也適用于導(dǎo)入,我們可以使用as關(guān)鍵字重命名它。
- const name1 = 'value1'
- const name2 = 'value2'
- export {
- name1,
- name2 as newName2
- }
- import {
- name1 as newName1,
- newName2
- } from '...'
- console.log(newName1); // 'value1'
- console.log(newName2); // 'value2'
- ❌
- name1; // undefined
- name2; // undefined
導(dǎo)入全部
- export const name = 'value'
- export default 'defaultValue'
- import * as anyName from 'some-path/file'
- console.log(anyName.name); // 'value'
- console.log(anyName.default); // 'defaultValue'
命名方式 vs 默認(rèn)方式
是否應(yīng)該使用默認(rèn)導(dǎo)出一直存在很多爭(zhēng)論。查看這2篇文章。
- Why I've stopped exporting defaults from my JavaScript modules
- GitLab RFC by Thomas Randolph
就像任何事情一樣,答案沒(méi)有對(duì)錯(cuò)之分。正確的方式永遠(yuǎn)是對(duì)你和你的團(tuán)隊(duì)最好的方式。
命名與默認(rèn)導(dǎo)出的非開(kāi)發(fā)術(shù)語(yǔ)
假設(shè)你欠朋友一些錢(qián)。你的朋友說(shuō)可以用現(xiàn)金或電子轉(zhuǎn)帳的方式還錢(qián)。通過(guò)電子轉(zhuǎn)帳付款就像named export一樣,因?yàn)槟愕男彰迅郊釉诮灰字?。因此,如果你的朋友健忘,并開(kāi)始叫你還錢(qián),說(shuō)他沒(méi)收到錢(qián)。這里,你就可以簡(jiǎn)單地向他們顯示轉(zhuǎn)帳證明,因?yàn)槟愕拿衷诟犊钪?。但是,如果你用現(xiàn)金償還了朋友的錢(qián)(就像default export一樣),則沒(méi)有證據(jù)。他們可以說(shuō)當(dāng)時(shí)的 100 塊是來(lái)自小紅?,F(xiàn)金上沒(méi)有名稱(chēng),因此他們可以說(shuō)是你本人或者是任何人😵
那么采用電子轉(zhuǎn)帳(named export)還是現(xiàn)金(default export)更好?
這取決于你是否信任的朋友🤔, 實(shí)際上,這不是解決這一難題的正確方法。更好的解決方案是不要將你的關(guān)系置于該位置,以免冒險(xiǎn)危及友誼,最好還是相互坦誠(chéng)。是的,這個(gè)想法也適用于你選擇named export還是default export。最終還是取決你們的團(tuán)隊(duì)決定,哪種方式對(duì)團(tuán)隊(duì)比較友好,就選擇哪種,畢竟不是你自己一個(gè)人在戰(zhàn)斗,而是一個(gè)團(tuán)體😄
作者:Samantha Ming 譯者:前端小智 來(lái)源:medium
原文:https://puppet.com/docs/puppet/latest/cheatsheet_module.html
本文轉(zhuǎn)載自微信公眾號(hào)「大遷世界」,可以通過(guò)以下二維碼關(guān)注。轉(zhuǎn)載本文請(qǐng)聯(lián)系大遷世界公眾號(hào)。






