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

為什么 JavaScript 模塊中的默認導出很糟糕

開發 前端
默認導出的開發體驗類似于 Node 中的 CommonJS,它的開發體驗也不太友好。判斷代碼是否使用 CommonJS 的一個簡單方法,就是看有沒有使用 require 和 module.exports 。

我們知道,JavaScript 模塊有兩種方法來定義導出:默認導出和命名導出。在本節中,我們來看下為什么默認導出是一種糟糕的做法,會導致不好的開發體驗。

下面,我們看下例子,假設,我們有一個模塊,它同時包含命名導出和默認導出,如下所示:

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

在導入使用之前,這里有一個問題,它可能會影響到我們的開發體驗。為什么 subtract  是默認的,而 add  是一個命名的導出?

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

考慮到開發人員使用一個他們不熟悉且復雜的模塊。他們可能不知道默認導出的是什么方法,甚至可能也不確定是否有默認導出。這導致開發者需要花更多的時間來閱讀文檔或源碼。如果模塊只有命名導出,那么使用起來就更加的方便,可讀性也會更好。

有了命名導出,使用IDE,我們可以很方便的知道一個模塊有哪些方法。那么,這個下面的列表中沒有展示什么呢?沒錯,就是默認導出。記住,默認導出不是命名的導出,所以 IDE 不知道改默認導出是干嘛的,也就不會在提示的列表中顯示出來:

圖片

默認導出的開發體驗類似于 Node 中的 CommonJS,它的開發體驗也不太友好。判斷代碼是否使用 CommonJS 的一個簡單方法,就是看有沒有使用 require 和 module.exports 。

下面我們再介紹一下,默認導出的一些用法(槽點):

  • 默認導出的名稱可以隨便我們取名。也就是說,減法函數你可以命名成乘法。這會導致混亂,特別是隨著代碼復雜度的增加。
import multiply from './math.js';
const result = multiply(2, 2); // results is now 0
  • 由于默認導出可以用任何名字,并且每個開發者的命名習慣不一樣,名稱就不一樣,這樣就沒有一致性了。
  • 默認導出也不利于重構。在命名導出中,如果哪天我們的方法名改了,那么IDE 會提示我們對應的方法不存在,我們可以更好的重構。對于默認導出,IDE 是沒有反饋的。

到這里,大家可能有一個問題,如果來自不同模塊的兩個命名導出具有相同的名稱,該怎么辦?

我們可以使用重命名的方式來解決這個問題:

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

雖然這種方式仍然需要為別名想一個名稱,但這比為默認導出想一個名稱要好得多,因為有命名導出作為參考。

最后,你可能也在想,"我使用的框架或工具幾乎要求我們默認導出一個函數或組件"。如果組件很多,我們可以通過使用 "index.js" 來解決這個問題。就是在目錄的根部創建一個index.js或index.ts文件,然后使用命名導出這些組件。

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

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

那么我們可以在 components 創建一個 index.js 文件,內容如下:

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

這樣我們在其它文件中使用命名導出的方式引入使用:

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

如果在寫一個模塊,無論是代碼庫還是開源庫,盡量少使用默認導出。

責任編輯:姜華 來源: 大遷世界
相關推薦

2018-12-29 14:45:34

RESTfulGoogleUser

2021-11-26 22:14:55

PHP編程語言開發

2021-01-05 13:45:31

Go語言編程語言

2018-01-17 22:17:16

IT架構數據糟糕架構

2012-07-16 09:41:59

項目

2012-07-16 11:27:08

項目開發

2020-12-23 14:18:43

JavaScript模塊導出

2009-12-09 09:48:23

IT市場失敗事件

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#語言編程

2016-04-06 11:29:58

JavaScriptDOM操作

2023-05-22 15:35:10

JavaScriptWeb開發

2021-09-29 10:48:48

比特幣區塊鏈數據

2014-05-16 10:51:33

科學代碼最佳實踐

2019-09-17 13:30:25

互聯網面試技術

2021-06-29 06:54:56

約會軟件算法應用程序

2021-02-05 07:33:05

JavaScript參數ES6

2023-08-15 11:24:42

人工智能AI
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 精品国产一区二区三区久久久蜜月 | 成人午夜视频在线观看 | 久久久免费 | 91在线精品一区二区 | 久草在线 | 亚洲国产日韩欧美 | 精品国产乱码久久久久久丨区2区 | 一级a性色生活片久久毛片波多野 | 国产成人精品一区二区三区四区 | 成人av免费播放 | 欧美一级www片免费观看 | 国产在线观看一区二区三区 | 欧美理论片在线观看 | 日韩精品一区二区三区久久 | 亚洲a视| 天天碰夜夜操 | 成年人免费看 | 91亚洲视频在线 | 国产精品久久久久久久久久免费看 | 国产高清在线精品一区二区三区 | 一区日韩 | 国产精品99久久久久久动医院 | 国产免费一级片 | 久夜精品 | 中文字幕亚洲欧美 | 精品欧美一区二区三区久久久 | 成人精品在线视频 | 国产成人精品久久久 | 男女av| 免费观看的av | 国产精品视频一二三区 | 野狼在线社区2017入口 | 日韩国产一区二区三区 | 免费观看毛片 | 亚洲人成在线观看 | 精品欧美一区二区三区久久久 | 精品蜜桃一区二区三区 | 欧美色专区 | 91久久精品国产 | 91精品国产91久久综合桃花 | 三级免费毛片 |