
本文详解 laravel spark 安装时因 cashier 版本不兼容导致的 composer 依赖冲突问题,提供精准的版本匹配策略、配置修正步骤及关键注意事项。
本文详解 laravel spark 安装时因 cashier 版本不兼容导致的 composer 依赖冲突问题,提供精准的版本匹配策略、配置修正步骤及关键注意事项。
Laravel Spark(特别是 v1.x 系列)对底层支付 SDK 有严格的版本约束。你遇到的错误:
laravel/spark-stripe[v1.0.0, ..., 1.x-dev] require laravel/cashier ^12.0 → but your root composer.json requires laravel/cashier ^13.8
明确指出核心矛盾:Spark Stripe 1.x 仅兼容 Cashier 12.x,与你当前声明的 Cashier 13.8 不兼容。这不是 Composer 缓存或网络问题,而是语义化版本(SemVer)强制约束下的硬性依赖冲突。
✅ 正确解决路径(二选一)
方案一:降级 Cashier 至 12.x(推荐用于 Stripe 场景)
修改 composer.json 中的 require 部分,将 Cashier 版本显式锁定为 ^12.0:
"laravel/cashier": "^12.0"
⚠️ 注意:Cashier 12 仅支持 Stripe(不支持 Paddle),且要求 PHP ≥ 7.4、Laravel ≥ 8.x —— 与你的 Laravel 9 兼容,无需额外调整。
随后执行:
composer update laravel/cashier laravel/spark-stripe --with-all-dependencies
--with-all-dependencies(或 -W)是必需参数,它允许 Composer 重新协商并降级相关依赖链(如 stripe/stripe-php 可能需同步调整至 v7.115 或更低)。
方案二:移除手动声明的 Cashier(更简洁)
Spark 包(如 laravel/spark-stripe)已在其 composer.json 中声明 "laravel/cashier": "^12.0" 为 required dependency。因此,你无需在根项目中重复声明 Cashier —— 手动声明反而会触发版本锁定冲突。
✅ 正确做法:
- 从 composer.json 的 require 中完全删除这一行:
"laravel/cashier": "^13.8",
- 同时,若你计划使用 Paddle 支付,请一并删除:
"laravel/spark-stripe": "^1.0"
并确保只保留:
"laravel/spark-paddle": "^1.0"
- 最后运行:
composer update laravel/spark-paddle --with-all-dependencies
? 关键注意事项
- 不要滥用 -W 强制更新:--with-all-dependencies 是解决此类冲突的必要开关,但仅应在明确知晓依赖关系的前提下使用;盲目全局执行 composer update -W 可能意外升级其他包,引发新问题。
- 仓库配置已正确:你添加的 "https://spark.laravel.com" 仓库配置无误,Spark 包可正常解析,问题纯属版本语义冲突。
- Spark 1.x 已停止维护:Laravel 官方已于 2022 年终止 Spark 1.x 支持。如项目处于早期阶段,建议评估迁移到 Laravel Jetstream + Laravel Cashier 的现代组合,获得长期安全更新与 Paddle/Stripe 双支付支持。
- 验证安装结果:成功安装后,运行 composer show laravel/cashier 应输出 v12.x 版本号;同时检查 vendor/laravel/spark-stripe/composer.json 确认其 require 字段确实包含 "laravel/cashier": "^12.0"。
遵循上述任一方案,即可彻底解决该依赖冲突,顺利完成 Laravel Spark 的集成。核心原则始终不变:以官方包的 composer.json 为准,避免在根项目中覆盖其受控依赖。










