Svelte-Kit搭配adapter-static用AWS Amplify构建报tslib错误如何解决
报错原因
该问题是ESM与CommonJS模块规范不兼容导致的,核心触发点有两个:
- tslib v2.6.0及以上版本调整了默认导出的暴露逻辑,不再直接给ESM导入场景暴露default导出,而旧版本的
@sveltejs/adapter-static采用了CommonJS风格的import tslib from 'tslib'语法,在SvelteKit默认的纯ESM项目环境下无法识别到对应导出。 - AWS Amplify构建环境默认会优先扁平化安装最高版本的依赖,容易出现项目局部依赖要求的tslib版本和全局安装的tslib版本不一致的冲突问题。
修复方案
- 锁定tslib的兼容版本
在package.json中根据你使用的包管理器添加版本锁定配置:
若使用npm,添加overrides配置:
若使用yarn或者pnpm,添加resolutions配置:{ "overrides": { "tslib": "~2.5.3" } }
配置完成后删除本地node_modules文件夹和对应的包锁文件(package-lock.json/yarn.lock/pnpm-lock.yaml),重新执行{ "resolutions": { "tslib": "~2.5.3" } }npm install安装依赖即可。 - 升级
@sveltejs/adapter-static到最新稳定版
旧版本的静态适配器已停止维护,且存在ESM兼容性缺陷,最新版本已经修复了tslib导入的相关问题,执行以下命令升级即可:npm install @sveltejs/adapter-static@latest --save-dev - 调整AWS Amplify构建配置
在项目根目录新增amplify.yml文件,指定构建使用的node版本和依赖安装参数,避免构建环境的依赖解析规则和本地不一致:version: 1 frontend: phases: preBuild: commands: - nvm use 18 - npm install --legacy-peer-deps build: commands: - npm run build artifacts: baseDirectory: build files: - '**/*' cache: paths: - node_modules/**/* - 新增Vite预构建配置(可选)
如果前面的操作完成后仍然报错,可以在svelte.config.js中添加Vite的优化依赖配置,强制预构建tslib为ESM兼容格式:import adapter from '@sveltejs/adapter-static'; export default { kit: { adapter: adapter(), vite: { optimizeDeps: { include: ['tslib'] } } } };
内容的提问来源于stack exchange,提问作者chovy
相关产品推荐
相关产品推荐

