ESM项目引入rollup-plugin-multi-input报multi is not a function问题问询
问题原因
你遇到的报错是ESM项目导入CommonJS格式包的默认导出适配问题:
rollup-plugin-multi-input仅提供CommonJS格式的产物,没有原生ESM导出。在设置了"type": "module"的项目中,Node.js处理ESM导入CommonJS包的逻辑是:将整个module.exports对象作为默认导入的返回值。- 该插件的导出逻辑是
exports.default = 函数,所以你默认导入拿到的multi实际上是{ default: [Function] }对象,而非函数本身,直接调用multi()自然会抛出「不是函数」的错误。 - 你用
createRequire导入时拿到的也是同一个module.exports对象,没有取default属性的情况下调用依然会报错。
而@rollup/plugin-multi-entry能正常使用,是因为它同时提供了ESM格式的.mjs产物,原生使用export default导出函数,适配ESM项目的导入逻辑,不需要额外处理。
解决方法
有两种简单的修复方案:
方案1:直接取默认导出的default属性
调用时添加.default即可:
import multi from 'rollup-plugin-multi-input'; // 插件配置里调用.default() plugins: [ multi.default(), // 其余插件不变 ]
如果用createRequire导入,写法如下:
import { createRequire } from "module"; const require = createRequire(import.meta.url); const multi = require('rollup-plugin-multi-input'); // 调用时取default plugins: [ multi.default(), ]
方案2:导入时重命名default属性
可以在导入语句直接指定取default属性赋值给变量,调用时不需要改写法:
import { default as multi } from 'rollup-plugin-multi-input'; // 直接正常调用即可 plugins: [ multi(), ]
内容的提问来源于stack exchange,提问作者Plastikfan
相关产品推荐
相关产品推荐

