![React工程师修炼指南](https://wfqqreader-1252317822.image.myqcloud.com/cover/475/37323475/b_37323475.jpg)
1.8 模块化
由于前端代码规模逐渐庞大,代码逻辑逐渐复杂,模块化概念逐渐引入到前端工程中。通过script标签引入代码块的方式会造成一个很大的问题就是变量污染,所以在ES5标准中会采取AMD、CMD来实现前端的模块化。比较典型的框架就是sea.js以及require.js。在ES6标准出现后,提供了自己的模块化方式。当然如果要使用ES6标准中的模块化工具,必须在script标签里声明type="module"。代码如下:
![](https://epubservercos.yuewen.com/D960D7/19773741008833706/epubprivate/OEBPS/Images/41_01.jpg?sign=1738884899-tdRyhOBZh3AFtp7y4r4j4hmno6Yhd3TR-0-e04ea6eae6bb08e11b24db8c1bf80318)
1.8.1 导入导出基本使用
在ES6标准中导出用关键字export或者export default;导入用import……from……。代码如下:
![](https://epubservercos.yuewen.com/D960D7/19773741008833706/epubprivate/OEBPS/Images/41_02.jpg?sign=1738884899-94lR5j2498sNzAoYteSKrfkM1QqEkw5q-0-cc3e77301f3b69a8add30575b8e7ea4e)
上述代码中,a模块中导出了变量a的同时默认导出了obj对象。这里需要注意,export导出是可以导出多个的,然后export default在每个模块中只能导出一个。导入的对应关系也需要注意,通过export导出的需要通过大括号解构变量,如代码中的{a}。然而通过export default导出的可以自定义变量来接收参数,如代码中的A变量对应的就是导出的obj对象。
1.8.2 导入导出变式写法
除了上面描述的模块的基本写法之外,导入导出当然还有很多变式写法。在导出的过程中可以导出多个,并且可以通过as来默认导出。如下:
![](https://epubservercos.yuewen.com/D960D7/19773741008833706/epubprivate/OEBPS/Images/42_01.jpg?sign=1738884899-QfDh1haVZJA4693nlsEjq7vRYAFnxTSn-0-40465fc0f7e834096dfe243b44914378)
同样在导入导出时都可以通过“as”关键字来起别名,代码如下:
![](https://epubservercos.yuewen.com/D960D7/19773741008833706/epubprivate/OEBPS/Images/42_02.jpg?sign=1738884899-krGvRptTz0F1O5xLSUsrOuFPzsBMuucH-0-78c5a120450d7d672569e517b28ce283)
上述代码中将a变量以c变量的名称导出,同时导入的过程中将c起别名d来导入。在导入过程中也可以通过通配符将所有导出全部获取,代码如下:
![](https://epubservercos.yuewen.com/D960D7/19773741008833706/epubprivate/OEBPS/Images/42_03.jpg?sign=1738884899-02GijdFTyWMXoifIPcluOZQUzG1VZHDw-0-b0d7049b827fc9fee038f5e48d0d6ecf)
1.8.3 按需导入
在使用ES6模块化导入模块的时候,会发现在页面加载的时候就会加载导入的模块文件。很多情况下需要延迟导入,当需要加载的时候再加载对应的模块来节约性能。这时可以通过import()函数来实现,代码如下:
![](https://epubservercos.yuewen.com/D960D7/19773741008833706/epubprivate/OEBPS/Images/43_01.jpg?sign=1738884899-G8hbE8AYewx3Qt28BylLJYc3QeNsXB3k-0-8bc7c38cb182c0adadd516e1a2f2e334)
import()函数会返还一个promise对象,所以可以调取then方法通过回调拿到导出的结果。同样可以通过async和await改造上述写法:
![](https://epubservercos.yuewen.com/D960D7/19773741008833706/epubprivate/OEBPS/Images/43_02.jpg?sign=1738884899-IZpVC4Ldu2Ybd5k55bKTdIBlE6dtscp1-0-90eb3d5d8fa6426c9a961a09b1eca27a)