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