使用Rollup + TypeScript构建模块时遭遇AST编译错误求助
解决Rollup + TypeScript构建时
type导入语法报错问题 问题分析
报错提示Expected ',', got 'Action',本质是Rollup试图用JavaScript解析器处理TypeScript文件,无法识别TS特有的type导入语法。结合你提到之前遇到过include配置不匹配的问题,核心原因大概率是Rollup的TypeScript插件没有正确捕获并处理src/CoreReduxTypes.ts文件。
解决方案
1. 统一include配置范围
把Rollup插件中的include路径缩小到源码目录,避免匹配到node_modules或其他非源码文件,同时确保和tsconfig.json的include完全对齐:
typescript({ tsconfig: './tsconfig.json', noEmitOnError: true, declaration: true, declarationDir: 'dist', // 只匹配src目录下的TS/TSX文件 include: ['src/**/*.ts', 'src/**/*.tsx'], outDir: 'dist', exclude: [ '**/*.test.tsx', '**/*.test.ts', '**/*.stories.ts', '**/*.stories.tsx' ] }),
同时检查tsconfig.json的include字段,确保包含目标文件:
{ "include": ["src/**/*"] }
2. 确保依赖版本兼容
@rollup/plugin-typescript需要依赖typescript,且版本需匹配。如果你的TypeScript版本是5.x+,确保插件版本至少为11.0.0以上:
# 安装最新兼容版本 npm install -D @rollup/plugin-typescript@latest typescript@latest
3. 调整插件执行顺序
确保resolve()插件在typescript()之前执行,让Rollup先找到正确的文件路径,再交给TypeScript插件处理:
plugins: [ cleandir(), peerDepsExternal({ includeDependencies: true }), resolve(), // 先执行路径解析 typescript({ /* 配置 */ }), // 再处理TS语法 json() ]
4. 检查TypeScript配置的模块设置
确保tsconfig.json中启用了支持type导入的模块规范:
{ "compilerOptions": { "module": "ESNext", "moduleResolution": "NodeNext", "target": "ES2020", "isolatedModules": true // 强制输出符合ES模块规范的代码,避免语法冲突 } }
5. 排查preserveModules配置冲突
如果以上方法无效,临时注释掉preserveModules: true测试是否能正常构建。若能正常构建,说明该配置的模块拆分逻辑与TS插件处理存在冲突,可尝试升级Rollup到最新版本,或添加preserveModulesRoot参数:
output: [ { preserveModules: true, preserveModulesRoot: 'src', // 指定模块根目录,确保拆分路径正确 dir: 'dist', format: 'esm' } ]
内容的提问来源于stack exchange,提问作者Joseph
相关产品推荐
相关产品推荐

