饥人谷技术博客

JS模块

2019-11-22  本文已影响0人  PingerL

一:什么是模块?

模块仅仅是一个文件,一个脚本而已。用一些关键字比如 export 和 import 来交换模块之间的功能(functionality)或者从一个模块中调用另一个模块中的函数

二:模块相较于普通的脚本有什么区别呢?

<script type="module">
  a = 5; // error
</script>

三:构建工具

四:模块的导入与导出

(一)静态导入 image.png
let modulePath = './Module.js';
import(modulePath)
  .then(obj => console.log('load ok'))
  .catch(err => console.log('err'))

另外,如果在一个 async 函数里,我们可以这样使用let module = await import(modulePath)
使用模式如下:

<!doctype html>
<script>
  async function load() {
    let say = await import('./say.js');
    say.hi(); // Hello!
    say.bye(); // Bye!
    say.default(); // Module loaded (export default)!
  }
</script>
<button onclick="load()">Click me</button>

四:总结

下面总结一下模块的核心概念:

  1. 模块就是文件。浏览器需要使用 <script type="module"> 属性以使 import/export 可用,这里有几点差别:
    • 默认是延迟解析的
    • 行内脚本是异步的
    • 加载外部不同源(domain/protocol/port)脚本时,必须提供 CORS 响应头
    • 重复的外部脚本会被忽略
  2. 模块有自己的本地顶级作用域,可以通过 import/export 交换功能
  3. 模块始终使用 use strict
  4. 模块代码只执行一次。导出的代码创建一次然后会在各导入之间共享

所以,通常来说,当我们使用模块的时候,每个模块实现特定功能并导出它。然后我们需要它的时候直接使用 import 导入即可。浏览器会自动加载和解析脚本。
在生产环境中,开发者经常基于性能或者其他原因而使用诸如 Webpack 这类的打包工具。

上一篇下一篇

猜你喜欢

热点阅读