现代Javascript教程 - 学习笔记12 - 模块

104 阅读3分钟

准备封装接口的时候,需要用到其他文件的资源,那么如何导入其他文件的资源?学习一下JS模块化!

学习链接

简介

模块:

一个模块(module)就是一个文件。一个脚本就是一个模块。就这么简单。

导入导出:

  • import - 导入其他模块资源
  • export - 导出,其他文件导入即可。

image.png

模块代码运行环境:

  • <script type="module"> - 如果有import之类的,模块支持特殊功能!
  • 只通过http(s)工作,需要开启本地服务器!!!

模块作用域:

  • 有自己的顶级作用域!
  • 同一个页面有两个<script type="module">,里面的变量不能互相访问。。

模块代码执行!

  • 在被导入的时候,只执行一次,即使多次import
  • 如果我们修改了导入的数据,在其他地方导入的时候,数据就显示被修改的了!
  • 模块中的this 是undefined,非模块脚本是window(全局对象)
  • 加载模块脚本是延迟的,等HTML文档全部完成,才执行
  • 使用模块脚本,如果未加载出来,应该要来个 - 加载指示器 - loading!
  • 模块始终使用 use strict

image.png

兼容性:

  • 旧时浏览器
  • <script nomodule>

旧时的浏览器不理解 type="module"。未知类型的脚本会被忽略。对此,我们可以使用 nomodule 特性来提供一个后备:

构建工具 - 如webpack

  • 从主模块开始
  • 分析
  • 构建一个文件 / 多个
  • 转换和优化 - 删除,转换语法。

image.png

导入导出

重点是

  • 常规导出,如函数,变量等,导入的时候,用大括号 {}
  • 默认导出,export default, 导入的时候,不能用大括号,这代表的是一个对象。。。需要的内容,要使用属性获取!
  • 每个文件最多只能有一个默认的导出

image.png

导入规则

  • 必须使用全局路径或相对路径 - ./ ../
  • 不能啥也没有 - 裸导入。

导入导出,可以重命名

  • 用as
  • sql常用啊。。

全部导入

  • 使用 *
  • 配合as,重命名,然后使用 . 的方式,当属性使用!

image.png

无效导入!

  • import 不能放在任何代码块中,如if
  • 默认是放在开头,放在最后,也能执行,,但是不容易识别。。

总结

模块化,很重要的一节,最大的收获是,了解了它是工作在Http(s)下的,使用的话,一定要开启本地服务器,有时候,下了一个项目,启动不了,开了本地服务器就可以了,就是这个原因了!

总结一下重点:

  • 模块有自己的顶级作用域
  • 模块的执行 - 只执行一次延迟加载,修改了导入的数据,其他导入也会显示! this是undefined
  • 模块导出 - 常规导出,默认导出(仅一个)是不一样的
  • 工作在Http(s) 下,要开启本地服务器
  • 必须要全局路径或相对路径
  • import 不能放在任何代码块中

生活的真谛从来都不在别处,就在日常一点一滴的奋斗里。