Rollup打包CodeMirror-Yjs编辑器报错:simple-peer未导出default
解决Rollup打包y-webrtc时simple-peer导出报错问题
问题根因
simplepeer.min.js是UMD格式的包,Rollup默认仅处理ES模块的导出规则,无法识别UMD包的默认导出逻辑,因此y-webrtc导入该模块时会抛出"default"未导出的错误。
可行解决方案
方案1:用Rollup插件处理UMD模块(推荐)
通过插件让Rollup正确解析UMD格式的模块:
- 安装必要的Rollup插件:
npm install --save-dev @rollup/plugin-commonjs @rollup/plugin-node-resolve
- 修改
rollup.config.js,添加插件配置:
import resolve from '@rollup/plugin-node-resolve'; import commonjs from '@rollup/plugin-commonjs'; export default { // 保留你的原有输入、输出配置 plugins: [ // 解析node_modules中的模块,适配浏览器环境 resolve({ browser: true, preferBuiltins: false }), // 处理CommonJS/UMD模块,显式指定simple-peer的导出项 commonjs({ include: 'node_modules/**', namedExports: { 'node_modules/simple-peer/simplepeer.min.js': ['default'] } }), // 保留你的其他插件(如babel、压缩插件等) ] };
方案2:换用含ES模块的simple-peer版本
部分新版本的simple-peer提供了ES模块入口,可以尝试升级或指定对应版本:
在package.json中修改依赖:
{ "dependencies": { "simple-peer": "^9.11.1" } }
重新安装依赖:
npm install
方案3:临时修改y-webrtc的导入逻辑(不推荐)
如果前两种方案无效,可临时修改node_modules/y-webrtc/src/y-webrtc.js的导入代码:
// 替换原import语句 // import SimplePeer from 'simple-peer' const SimplePeer = require('simple-peer').default || require('simple-peer');
⚠️ 注意:该修改会在依赖更新后被覆盖,需自行维护,仅作为临时应急方案。
验证修改
完成配置修改后,重新执行打包命令:
npm run dist
内容的提问来源于stack exchange,提问作者Charles
相关产品推荐
相关产品推荐

