Vercel构建报错:找不到@stripe/stripe-js声明文件
问题重现
执行npm run build时出现类型错误:
./components/shared/Checkout.tsx:2:26
类型错误:找不到模块'@stripe/stripe-js'的声明文件。'/vercel/path0/node_modules/@stripe/stripe-js/dist/stripe.mjs'隐式拥有'any'类型。
在'/vercel/path0/node_modules/@stripe/stripe-js/types/index.d.ts'存在类型文件,但遵循package.json的"exports"规则时无法解析。'@stripe/stripe-js'库可能需要更新其package.json或类型定义。
2 | import {loadStripe} from '@stripe/stripe-js';
| ^
错误:命令"npm run build"以代码1退出
解决方案
更新@stripe/stripe-js到最新版本
旧版本的Stripe库可能存在exports字段配置不兼容TypeScript解析的问题,执行以下命令更新:npm install @stripe/stripe-js@latest更新后本地先运行
npm run build验证是否解决问题,再重新部署到Vercel。调整TypeScript模块解析策略
打开项目根目录的tsconfig.json,确保compilerOptions中配置了适配现代包导出规则的模块解析方式:{ "compilerOptions": { "moduleResolution": "node16", "module": "ESNext", "target": "ES2020" } }这会让TypeScript正确识别包的
exports配置,找到对应的类型声明文件。临时类型导入 workaround
如果更新包和调整配置后仍未解决,可以在Checkout.tsx文件顶部添加类型引用声明:/// <reference types="@stripe/stripe-js" />或者直接修改导入路径为Stripe的ES模块入口:
import { loadStripe } from '@stripe/stripe-js/dist/stripe.esm';清理依赖缓存重新安装
有时候缓存会导致依赖解析异常,执行以下命令清理后重新安装:rm -rf node_modules package-lock.json npm install
内容的提问来源于stack exchange,提问作者Rukshan Jayasooriya

