ES6 中 module 备忘清单,你可能知道 module 还可以这样用!

开发 前端
假设你欠朋友一些钱。你的朋友说可以用现金或电子转帐的方式还钱。通过电子转帐付款就像named export一样,因为你的姓名已附加在交易中。

[[332939]]

这是一份备忘单,展示了不同的导出方式和相应的导入方式。它实际上可分为3种类型:名称,默认值和列表 👍

  1. // 命名导入/导出  
  2. export const name = 'value' 
  3. import { name } from '...' 
  4.  
  5. // 默认导出/导入 
  6. export default 'value' 
  7. import anyName from '...' 
  8.  
  9. // 重命名导入/导出  
  10. export { name as newName } 
  11. import { newName } from '...' 
  12.  
  13. // 命名 + 默认 | Import All 
  14. export const name = 'value' 
  15. export default 'value' 
  16. import * as anyName from '...' 
  17.  
  18. // 导出列表 + 重命名 
  19. export { 
  20.   name1, 
  21.   name2 as newName2 
  22. import { 
  23.   name1 as newName1, 
  24.   newName2 
  25. from '...' 

接下来,我们来一个一个的看🤓

命名方式

这里的关键是要有一个name。

  1. export const name = 'value'
  2. import { name } from 'some-path/file'
  3.  
  4. console.log(name); // 'value' 

默认方式

使用默认导出,不需要任何名称,所以我们可以随便命名它👏

  1. export default 'value' 
  2. import anyName from 'some-path/file' 
  3.  
  4. console.log(anyName) // 'value' 

默认方式不用变量名

  1. export default const name = 'value';   
  2. // 不要试图给我起个名字! 

命名方式 和 默认方式 一起使用命名方式 和 默认方式 可以同个文件中一起使用🤝

  1. eport const name = 'value' 
  2. eport default 'value' 
  3. import anyName, { name } from 'some-path/file' 

导出列表

第三种方式是导出列表(多个)

  1. const name1 = 'value1' 
  2. const name2 = 'value2' 
  3.  
  4. export { 
  5.   name1, 
  6.   name2 
  7. import {name1, name2 } from 'some-path/file' 
  8.  
  9. console.log( 
  10.   name1,  // 'value1'  
  11.   name2,  // 'value2'  

需要注意的重要一点是,这些列表不是对象。它看起来像对象,但事实并非如此。我第一次学习模块时,我也产生了这种困惑。真相是它不是一个对象,它是一个导出列表

  1. // ❌ Export list ≠ Object 
  2. export { 
  3.   name'name' 

重命名的导出

对导出名称不满意?问题不大,可以使用as关键字将其重命名。

  1. const name = 'value' 
  2.  
  3. export { 
  4.   name as newName 
  5. import { newName } from 'some-path/file' 
  6.  
  7. console.log(newName); // 'value' 
  8.  
  9. // 原始名称不可访问 
  10. console.log(name); // ❌ undefined 

不能将内联导出与导出列表一起使用

  1. export const name = 'value' 
  2.  
  3. // 你已经在导出 name ☝️,请勿再导出我 
  4. export { 
  5.   name 

重命名导入

同样的规则也适用于导入,我们可以使用as关键字重命名它。

  1. const name1 = 'value1' 
  2. const name2 = 'value2' 
  3.  
  4. export { 
  5.   name1, 
  6.   name2 as newName2 
  7. import { 
  8.   name1 as newName1, 
  9.   newName2 
  10. from '...' 
  11.  
  12. console.log(newName1); // 'value1' 
  13. console.log(newName2); // 'value2' 
  14.  
  15. ❌ 
  16. name1; // undefined 
  17. name2; // undefined 

导入全部

  1. export const name = 'value' 
  2.  
  3. export default 'defaultValue' 
  4. import * as anyName from 'some-path/file' 
  5.  
  6. console.log(anyName.name); // 'value' 
  7. 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

本文转载自微信公众号「大迁世界」,可以通过以下二维码关注。转载本文请联系大迁世界公众号。

 

责任编辑:武晓燕 来源: 大迁世界
相关推荐

2022-09-26 07:32:24

开发接口编程

2021-02-01 13:35:28

微信Python技巧

2022-07-26 09:02:15

ES6ES13ECMAScript

2012-10-12 10:13:26

eclips代码编写Editplus

2020-08-24 07:19:13

主键自增数据库

2021-03-03 08:05:53

C++项目函数

2020-07-16 08:32:16

JavaScript语言语句

2023-12-11 13:57:00

RFM模型激励机制

2022-08-02 10:01:34

Import语句ES模块

2024-01-08 16:27:59

ES6函数

2022-07-30 23:45:09

内存泄漏检测工具工具

2018-05-11 10:15:09

区块链数字货币比特币

2022-05-17 07:26:33

动画CSS前端

2023-07-03 16:49:47

2013-09-18 10:44:01

搜狗输入法词语

2011-06-16 12:08:55

笔记本体验

2021-08-11 07:54:47

Commonjs

2019-01-29 10:00:59

GitHub开源搜索

2020-01-03 10:11:01

数据库安全SQL

2021-08-16 07:05:58

ES6Promise开发语言
点赞
收藏

51CTO技术栈公众号