我思考了很多天这个问题,现在决定向专家请教。浏览器将如何处理新的import/export语法?我的意思是:模块是否会异步加载?只引用我的主文件或入口文件,浏览器会延迟加载所需的模块。也许我对这种新架构有什么误解或误解吗?非常感谢!祝好!
这是现在标准化的,所有主要现代浏览器都支持。
模块将异步加载吗?
是的,有两个选项可用;详见下文。
只需引用我的主文件或入口文件,浏览器就会延迟加载所需的模块。
不算“懒惰”,但是是的。
要实现此行为,您需要使用type="module"
来指定脚本是一个模块:
<script src="main.js" type="module"></script>
<script type="module">
// ...module code here
</script>
main.js
)加载的模块,就像CSS一样),或者相对于文档进行解析(对于像上面的内联模块)。http://example.com/index.html
中有这个:<script src="./handy/stuff/nifty.js" type="module"></script>
...而nifty.js
包含
import Thingy from "./thingy.js";
http://example.com/handy/stuff/thingy.js
,而不是 http://example.com/thingy.js
。就像 CSS 导入一样。./
是必需的,只有 from "thingy.js"
是行不通的。这是因为裸指示符被禁止,因为它们可能最终具有特殊含义。(例如,在 Node.js 中,这是指定内置模块和安装在 node_modules
中的模块的方式。)模块指示符必须是完整的 URL,或以 /
、./
或 ../
开头的相对 URL。type="module"
的脚本来说,如果在script
标签上没有放置任何特殊的标志属性,那么该模块的所有依赖项将会被解析,然后在HTML解析完成后运行该脚本。如果加上async
属性,它可能会在HTML解析完成之前更早地运行(例如,如果所有脚本都在缓存中)。 (defer
对于模块无效。)