# 【JavaScript进阶】export、export default和import

问题起源:同事给项目加新的模块的时候,React报了这个错👇,然后模块没有加载成功。。

...Lazy element type must resolve to a class or function...

最后搞了半天发现是export的问题,模块导出写错了不符合规范,导致React的懒加载失败了。我发现我还是太菜鸡了😐

本文研究一下export的问题,还有与之对应的import

# 一、ES6最重要特性

export还有importES6最重要的特性之二

export的作用是将一个JavaScript模块中的值、方法、对象等导入到另一个模块中,另一个模块通过import语句来使用。

导入的模块中只能读取,不能修改。想要修改的话只能去到导出的模块中修改,并且修改的值会实时更新

# 二、使用方法

# 语法

有两种exports导出方式:

  • 命名导出(每个模块包含任意数量
  • 默认导出(每个模块包含一个

# 用法

export







 


 
 




 

// export
const datas = [];
function print (str) {
  console.log(str);
}

export { datas, print };

// 直接导出 上下等效
export const datas = [];
export function print (str) {
  console.log(str)
}

// import
import { datas, print } from "export"
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

export default

顾名思义,默认导出只能导出一个,并且可以在导入模块中为其定义任何符合规范的名称

并且一个模块中只能有一个export default






 


 
 

// export-default
function print (str) {
  console.log(str);
}

export default print;

// import
import print from "export-default"
import print1 from "export-default"
1
2
3
4
5
6
7
8
9
10

# 三、区别

  • 1.export可以在一个模块中使用多次,而export default只能使用一次

  • 2.使用exportexport default时,import要与之对应:

    • export { datas, func1 } => import { datas, func1 } from "xxx"
    • export default func1 => import func2 from "xxx"
  • 3.export导出的变量、方法等导入模块中的变量名必须与导出模块相同

    export default导出的变量、方法等导入模块中可以使用任何符合命名规范的变量名

# 四、参考资料

Last Updated: 2 years ago