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






