Manifest V3 Chrome扩展PostalMime is not a constructor报错咨询
错误原因
这个报错是两个问题叠加导致的:
- 导入语法和postal-mime的导出规则不匹配
postal-mime 库的入口文件采用默认导出的形式对外暴露PostalMime构造函数:- ESM模式下,导出值绑定在
default属性上,没有对外暴露名为PostalMime的命名导出 - CommonJS模式下,直接将构造函数作为
module.exports的值,而非导出{ PostalMime: 构造函数 }结构的对象
你之前用的命名导入import { PostalMime }、解构导入const { PostalMime } = require()两种写法,拿到的都是undefined,实例化时自然会抛出「不是构造函数」的错误。
- ESM模式下,导出值绑定在
- Manifest V3 扩展的 Service Worker 环境默认不支持 CommonJS 语法
MV3 背景 Service Worker 默认采用经典脚本模式,原生不支持require()语法;如果要使用ES模块的import语法,必须手动在清单文件中开启模块类型声明,否则依赖加载会出现异常。
修复方法
按照以下步骤调整即可:
- 修改
manifest.json配置,给Service Worker开启ES模块支持{ "manifest_version": 3, "background": { "service_worker": "sw.js", "type": "module" }, // 其余原有配置保持不变 } - 修正postal-mime的导入语句,使用默认导入的写法:
import PostalMime from "postal-mime"; - 原有业务逻辑无需修改,保持原有的实例化、解析逻辑即可正常运行:
const parser = new PostalMime(); parser.parse(result).then((email) => console.log(email));
补充说明:如果你使用webpack、rollup、vite等打包工具构建扩展代码,需要确认打包配置没有强制将ESM默认导出转为命名导出,否则依然会出现取值异常的问题。不推荐在MV3 Service Worker中使用CommonJS的
require写法,原生环境没有内置该模块加载能力。
内容的提问来源于stack exchange,提问作者GTP95
相关产品推荐
相关产品推荐

