Chrome扩展开发中ES6模块导入带.js与不带.js后缀的差异
Chrome扩展中ES模块导入带后缀与不带后缀的区别
核心区别在于:浏览器原生ES模块环境(包括Chrome扩展的背景脚本)不支持自动补全文件扩展名,而Node.js这类后端环境支持,这就是你遇到问题的根源。
具体拆解:
- 当你写
import { foo } from "./index"时,Chrome会直接尝试加载路径为./index的资源,但你的实际文件是index.js,路径完全不匹配,所以触发"获取脚本时发生未知错误"的报错。 - 写
import { foo } from "./index.js"时,路径和实际文件名完全对应,Chrome能精准定位到文件,自然可以正常运行。
补充两个关键细节:
- 浏览器ES模块的规则本身就很严格,它不像Node.js那样会自动尝试补全
.js、.json这类后缀,也不会自动去目录里查找默认的index文件,必须写全完整的文件名(包括扩展名)。 - 如果你用的是Manifest V3版本的Chrome扩展,背景脚本是以Service Worker形式运行的,它对ES模块的路径要求比Manifest V2更严苛,省略后缀的写法完全不被支持。
内容的提问来源于stack exchange,提问作者AMORE
相关产品推荐
相关产品推荐

