ECMAScript modules in browsers
https://jakearchibald.com/2017/es-modules-in-browsers/
基本示例
<!DOCTYPE html>
<meta name="viewport" content="width=device-width, minimum-scale=1.0">
<script type="module">
import {addTextToBody} from './utils.js';
addTextToBody('Modules are pretty cool.');
</script>
// utils.mjs
export function addTextToBody(text) {
const div = document.createElement('div');
div.textContent = text;
document.body.appendChild(div);
}
export/import
export function name() {}
export function draw() {}
// 或者
function name() {}
function draw() {}
export { name, draw };
import { name, draw, reportArea, reportPerimeter } from './square.js';
name()
import * as Square from './square.js';
Square.name()
function randomSquare() {}
export default randomSquare;
// 或者
export default function() {}
import randomSquare from './square.js';
// 相当于给default 取了个别名
import {default as randomSquare} from './square.js';
// 还可以混合使用
import sum, { color } from "./example.js";
外部链接执行顺序, type="module" 默认有defer 延迟执行效果
<!-- This script will execute after… -->
<script type="module" src="1.mjs"></script><!-- 2 -->
<!-- …this script… -->
<script src="2.js"></script><!-- 1, 第一个执行 -->
<!-- …but before this script. -->
<script defer src="3.js"></script><!-- 3 -->