准备封装接口的时候,需要用到其他文件的资源,那么如何导入其他文件的资源?学习一下JS模块化!
学习链接
简介
模块:
一个模块(module)就是一个文件。一个脚本就是一个模块。就这么简单。
导入导出:
- import - 导入其他模块资源
- export - 导出,其他文件导入即可。
模块代码运行环境:
<script type="module">- 如果有import之类的,模块支持特殊功能!- 只通过http(s)工作,需要开启本地服务器!!!
模块作用域:
- 有自己的顶级作用域!
- 同一个页面有两个
<script type="module">,里面的变量不能互相访问。。
模块代码执行!
- 在被导入的时候,只执行一次,即使多次import
- 如果我们修改了导入的数据,在其他地方导入的时候,数据就显示被修改的了!
- 模块中的this 是undefined,非模块脚本是window(全局对象)
- 加载模块脚本是延迟的,等HTML文档全部完成,才执行
- 使用模块脚本,如果未加载出来,应该要来个 - 加载指示器 - loading!
- 模块始终使用
use strict
兼容性:
- 旧时浏览器
<script nomodule>
旧时的浏览器不理解
type="module"。未知类型的脚本会被忽略。对此,我们可以使用nomodule特性来提供一个后备:
构建工具 - 如webpack
- 从主模块开始
- 分析
- 构建一个文件 / 多个
- 转换和优化 - 删除,转换语法。
导入导出
重点是
- 常规导出,如函数,变量等,导入的时候,用大括号 {}
- 默认导出,export default, 导入的时候,不能用大括号,这代表的是一个对象。。。需要的内容,要使用属性获取!
- 每个文件最多只能有一个默认的导出
导入规则
- 必须使用全局路径或相对路径 -
./ ../ - 不能啥也没有 - 裸导入。
导入导出,可以重命名
- 用as
- sql常用啊。。
全部导入
- 使用 *
- 配合as,重命名,然后使用 . 的方式,当属性使用!
无效导入!
- import 不能放在任何代码块中,如if
- 默认是放在开头,放在最后,也能执行,,但是不容易识别。。
总结
模块化,很重要的一节,最大的收获是,了解了它是工作在Http(s)下的,使用的话,一定要开启本地服务器,有时候,下了一个项目,启动不了,开了本地服务器就可以了,就是这个原因了!
总结一下重点:
- 模块有自己的顶级作用域
- 模块的执行 - 只执行一次,延迟加载,修改了导入的数据,其他导入也会显示! this是undefined
- 模块导出 - 常规导出,默认导出(仅一个)是不一样的
- 工作在Http(s) 下,要开启本地服务器
- 必须要全局路径或相对路径
- import 不能放在任何代码块中
生活的真谛从来都不在别处,就在日常一点一滴的奋斗里。