请说明在浏览器环境中,如何利用原生 ESM(ES Module)机制加载和使用模块?
考察说明
考查对浏览器原生ESM模块机制的理解,包括加载方式、特点及注意事项。
回答思路
- 【回答框架 1】原生ESM是JavaScript官方模块方案,浏览器通过<script type="module">标签加载,模块文件采用import/export语法。这种方式支持静态分析、异步加载,并自动启用严格模式。
- 【回答框架 2】使用方式上,在HTML中通过<script type="module" src="module.js">引入入口模块,模块内部通过import语句引入其他模块。模块路径必须为相对路径、绝对URL或完整URL,不支持裸模块名。
- 【回答框架 3】原生ESM具有静态导入导出、自动异步执行、每个模块作用域隔离、默认严格模式等特点,并会延迟执行直到依赖解析完成,支持动态导入import()。
- 【回答框架 4】注意事项包括:模块缓存机制,多次导入同一模块只执行一次;支持循环依赖但在引用不能保证值已初始化;CORS限制,跨域加载模块需要服务器支持正确响应头。
- 【关键点 1】使用<script type="module">标签引入入口模块,内部用import/export交换。
- 【关键点 2】支持异步加载与静态分析,模块默认严格模式,作用域隔离。
- 【关键点 3】模块路径必须为URL形式,不支持裸模块名,需要服务器支持CORS。
- 【关键点 4】模块缓存与循环依赖需注意,动态导入通过import()。
- 【易错点 1】不要将模块文件当作普通脚本加载,缺少type="module"会产生语法错误。
- 【易错点 2】裸模块名(如import _ from 'lodash')在浏览器中原生不支持,需借助打包器或import map。
- 【易错点 3】注意CORS限制,跨域加载模块可能被浏览器拦截。