携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第31天,点击查看活动详情
模块化开发:把一个大的文件拆分成多个独立的小文件,再把它们合并到一起,进行运行。 CommonJS和AMD也是模块化开发,但使用时必须下载第三方插件。前者用在服务器上,后者用在浏览器。
export命令(输出)
- 用法:想把谁暴露出去,就在谁的前面加export。
- 也可以统一暴露,语法:export{名字1,名字2,名字3...}
- 还可以输出函数和类
- 使用as给要输出去的文件起一个别名,起了别名之后引入时就得使用xxx,引入的js文件就不会知道xxx背后真实身份
function abc(x,y){
return x+y
}
export abc as xxx
引入时使用import xxx from "模块路径"(注意,要写当前目录,用./)
- 默认暴露
- 语法:export default 要暴露的变量名
解释:默认暴露的基本都是一个对象,而且一个模块只能有一个默认暴露的值。在引入时,不能对这个对象进行解构。 注意:只要没有暴露出去,就没法用import引入
import命令(引入)
import命令是异步加载
import必须写在顶层,不能写在某些条件里,因为在读取代码时,肯定会先读取这个文件
语法1:import {变量名1,变量名2...} from "模块路径" 解释:{}里的就是暴露出来的名字,里面的变量名和暴露出来的名字要一致,相当于是对象的解构。
import后面的from指定文件的路径,可以是相对路径,也可以是绝对路径 注意:import命令具有提升效果,会提升到整个模块的头部,首先执行。
模块的整体加载
语法2:import*as object from "文件路径" 用一个对象来接收暴露出来的变量,作为这个对象的属性名,读取的时候直接用对象名.属性名(就是暴露出来的变量名)
语法3:import num from "文件路径"
有条件:引入一个默认的输出值。一个模块只能有一个默认暴露的值,把该暴露的值引入就可以使用该语法。接收时也只能写一个。 注意:1、用该方法引入时变量名可以和输出的变量名不一样 2、一个模块里只能使用一次default 3、一个模块可以引入多个小模块
import()方法
作用:按需加载。该方法属于异步加载
返回值:是一个promise对象。可以用then方法处理函数,但推荐使用await
注意:
1、该方法也可以用在async函数里,因为await后面就是放一个promise对象,而import返回值正好是一个promise对象。
2、通过import()方法引入的暴露对象,存在的default属性里。不管是用then方法还是await方法接这个promise,想要得到暴露出来的数据,就得变量名.default(这里的变量名是await返回值或者是then方法里的value值)。
注意:浏览器加载ES6模块,它是异步的,得等同步的html和css等加载完成之后,再来加载模块。
如何异步加载js? 给script加入defer属性,这时候js文件就成为了异步加载任务。必须等所有的内容都渲染完成之后,再执行。defer相当于是重新排队。 给script加入async属性,这时候js文件就成为了异步加载任务。必须等内容下载完之后就开始执行了。async相当于是插队继续办理业务。 script的type类型是module,也是模块的异步加载。