成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

為什么 JavaScript 模塊中的默認(rèn)導(dǎo)出很糟糕

開發(fā) 前端
默認(rèn)導(dǎo)出的開發(fā)體驗(yàn)類似于 Node 中的 CommonJS,它的開發(fā)體驗(yàn)也不太友好。判斷代碼是否使用 CommonJS 的一個(gè)簡(jiǎn)單方法,就是看有沒(méi)有使用 require 和 module.exports 。

我們知道,JavaScript 模塊有兩種方法來(lái)定義導(dǎo)出:默認(rèn)導(dǎo)出和命名導(dǎo)出。在本節(jié)中,我們來(lái)看下為什么默認(rèn)導(dǎo)出是一種糟糕的做法,會(huì)導(dǎo)致不好的開發(fā)體驗(yàn)。

下面,我們看下例子,假設(shè),我們有一個(gè)模塊,它同時(shí)包含命名導(dǎo)出和默認(rèn)導(dǎo)出,如下所示:

export const add = (a, b) => a + b;
export default subtract = (a, b) => a - b;

在導(dǎo)入使用之前,這里有一個(gè)問(wèn)題,它可能會(huì)影響到我們的開發(fā)體驗(yàn)。為什么 subtract  是默認(rèn)的,而 add  是一個(gè)命名的導(dǎo)出?

ps:我舉的例子,可能有點(diǎn)刻意,但隨著模塊的復(fù)雜,類似這種情況有常有的

考慮到開發(fā)人員使用一個(gè)他們不熟悉且復(fù)雜的模塊。他們可能不知道默認(rèn)導(dǎo)出的是什么方法,甚至可能也不確定是否有默認(rèn)導(dǎo)出。這導(dǎo)致開發(fā)者需要花更多的時(shí)間來(lái)閱讀文檔或源碼。如果模塊只有命名導(dǎo)出,那么使用起來(lái)就更加的方便,可讀性也會(huì)更好。

有了命名導(dǎo)出,使用IDE,我們可以很方便的知道一個(gè)模塊有哪些方法。那么,這個(gè)下面的列表中沒(méi)有展示什么呢?沒(méi)錯(cuò),就是默認(rèn)導(dǎo)出。記住,默認(rèn)導(dǎo)出不是命名的導(dǎo)出,所以 IDE 不知道改默認(rèn)導(dǎo)出是干嘛的,也就不會(huì)在提示的列表中顯示出來(lái):

圖片

默認(rèn)導(dǎo)出的開發(fā)體驗(yàn)類似于 Node 中的 CommonJS,它的開發(fā)體驗(yàn)也不太友好。判斷代碼是否使用 CommonJS 的一個(gè)簡(jiǎn)單方法,就是看有沒(méi)有使用 require 和 module.exports 。

下面我們?cè)俳榻B一下,默認(rèn)導(dǎo)出的一些用法(槽點(diǎn)):

  • 默認(rèn)導(dǎo)出的名稱可以隨便我們?nèi)∶?。也就是說(shuō),減法函數(shù)你可以命名成乘法。這會(huì)導(dǎo)致混亂,特別是隨著代碼復(fù)雜度的增加。
import multiply from './math.js';
const result = multiply(2, 2); // results is now 0
  • 由于默認(rèn)導(dǎo)出可以用任何名字,并且每個(gè)開發(fā)者的命名習(xí)慣不一樣,名稱就不一樣,這樣就沒(méi)有一致性了。
  • 默認(rèn)導(dǎo)出也不利于重構(gòu)。在命名導(dǎo)出中,如果哪天我們的方法名改了,那么IDE 會(huì)提示我們對(duì)應(yīng)的方法不存在,我們可以更好的重構(gòu)。對(duì)于默認(rèn)導(dǎo)出,IDE 是沒(méi)有反饋的。

到這里,大家可能有一個(gè)問(wèn)題,如果來(lái)自不同模塊的兩個(gè)命名導(dǎo)出具有相同的名稱,該怎么辦?

我們可以使用重命名的方式來(lái)解決這個(gè)問(wèn)題:

import { Article } from './types';
import { Article as ArticleComponent } from 'my-design-system';

雖然這種方式仍然需要為別名想一個(gè)名稱,但這比為默認(rèn)導(dǎo)出想一個(gè)名稱要好得多,因?yàn)橛忻麑?dǎo)出作為參考。

最后,你可能也在想,"我使用的框架或工具幾乎要求我們默認(rèn)導(dǎo)出一個(gè)函數(shù)或組件"。如果組件很多,我們可以通過(guò)使用 "index.js" 來(lái)解決這個(gè)問(wèn)題。就是在目錄的根部創(chuàng)建一個(gè)index.js或index.ts文件,然后使用命名導(dǎo)出這些組件。

比如我們有一個(gè)文件 components,該文件主要放置我們封裝的組件:

src/ 
components/
com1/
index.vue
com2/
index.vue

那么我們可以在 components 創(chuàng)建一個(gè) index.js 文件,內(nèi)容如下:

export { default as Com1 } from './com1'
xport { default as Com2 } from './com2'

這樣我們?cè)谄渌募惺褂妹麑?dǎo)出的方式引入使用:

import { Com1, Com2 } from '@/components'

如果在寫一個(gè)模塊,無(wú)論是代碼庫(kù)還是開源庫(kù),盡量少使用默認(rèn)導(dǎo)出。

責(zé)任編輯:姜華 來(lái)源: 大遷世界
相關(guān)推薦

2018-12-29 14:45:34

RESTfulGoogleUser

2021-11-26 22:14:55

PHP編程語(yǔ)言開發(fā)

2021-01-05 13:45:31

Go語(yǔ)言編程語(yǔ)言

2018-01-17 22:17:16

IT架構(gòu)數(shù)據(jù)糟糕架構(gòu)

2012-07-16 09:41:59

項(xiàng)目

2012-07-16 11:27:08

項(xiàng)目開發(fā)

2020-12-23 14:18:43

JavaScript模塊導(dǎo)出

2009-12-09 09:48:23

IT市場(chǎng)失敗事件

2012-08-13 09:25:50

程序員

2009-08-24 09:20:18

2023-01-05 08:34:48

JDK工具

2024-09-11 08:38:02

JavaScriptC#語(yǔ)言編程

2016-04-06 11:29:58

JavaScriptDOM操作

2023-05-22 15:35:10

JavaScriptWeb開發(fā)

2021-09-29 10:48:48

比特幣區(qū)塊鏈數(shù)據(jù)

2014-05-16 10:51:33

科學(xué)代碼最佳實(shí)踐

2021-06-29 06:54:56

約會(huì)軟件算法應(yīng)用程序

2019-09-17 13:30:25

互聯(lián)網(wǎng)面試技術(shù)

2021-02-05 07:33:05

JavaScript參數(shù)ES6

2023-08-15 11:24:42

人工智能AI
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 日本一区二区高清不卡 | 亚洲一区二区三区免费在线 | 99免费精品视频 | 欧美激情在线观看一区二区三区 | 亚洲精品久久国产高清情趣图文 | 亚洲精品视频三区 | 欧美一区二区三区高清视频 | 毛片免费视频 | 亚洲在线一区二区 | 欧美日韩电影一区二区 | 国产在线一区二 | 天堂资源| 国产精品一区二区三区四区五区 | 日韩精品一区二区三区视频播放 | 成人在线视频一区 | 国产精品一区二区免费 | h视频免费观看 | 成年人在线观看视频 | 日本不卡一区二区三区 | 日韩三级在线 | 91麻豆精品国产91久久久更新资源速度超快 | 青青草原综合久久大伊人精品 | 午夜ww| 国产99久久久国产精品 | 自拍偷拍亚洲欧美 | 精品免费视频 | 免费三级网站 | 精品日韩 | 国产日韩欧美精品一区二区 | www.中文字幕.com | 日韩在线免费视频 | 欧美激情在线精品一区二区三区 | 亚洲综合视频 | 国产高清精品在线 | 91五月天| 成年人在线视频 | 欧美在线成人影院 | 久久精品国产久精国产 | 日批的视频 | 国产伦精品一区二区三区高清 | 亚洲欧美一区二区三区视频 |