vendor/bower/jquery/dist 不存在是因为 Composer 不安装 Bower 包,fxp/composer-asset-plugin 已停更失效,实际资源被下载至 vendor/bower-asset;需在 config/web.php 中设 Yii::setAlias('@bower', '@vendor/bower-asset') 并清理 vendor/bower 目录。

为什么 vendor/bower/jquery/dist 会不存在
因为 Composer 从不真正安装 Bower 包——它只处理 PHP 包。所谓 vendor/bower/xxx 是旧版 Yii2 项目中通过 fxp/composer-asset-plugin 插件伪造的路径,该插件早在 2019 年就停止维护,PHP 8+ 下直接报 Class "Fxp\Composer\AssetPlugin\Repository\NpmRepository" not found。你现在看到的 vendor/bower 目录,大概率是空的、残留的,或被插件中途失败后丢弃的半成品。
Yii2 项目里 @bower 别名指向错误目录
Yii2 的 AssetManager 默认用 @bower 别名定位 jQuery、Bootstrap 等前端资源路径,但它的默认值是 vendor/bower,而现代 Composer(≥2.0)配合 asset-packagist 或 fxp 插件实际把文件下到 vendor/bower-asset。所以运行时抛出 Invalid argument exception: the file or directory to be published does not exist: .../vendor/bower/jquery/dist。
修复方式不是改源码(比如硬改 Application.php),而是统一在项目级配置别名:
- 在
config/web.php或common/config/bootstrap.php中添加:Yii::setAlias('@bower', '@vendor/bower-asset'); - 确认没有其他地方(如
index.php或自定义 Bootstrap 文件)重复或覆盖了@bower定义 - 删掉
vendor/bower目录(如果存在),避免干扰
composer require 报 “no matching package found” 涉及 bower-asset
典型错误信息是:yiisoft/yii2-bootstrap 2.0.8 requires bower-asset/bootstrap 3.3.* -> no matching package found。这不是包名拼错,而是以下任一原因:
前端设计与 UI/UX 全方位优化专家。覆盖视觉层次、排版系统、色彩理论、响应式布局、交互体验、动画动效、无障碍访问、性能优化八大维度,帮助开发者将普通页面升级为高品质产品级界面。前端设计与 UI/UX 全方位优化专家。覆盖视觉层次、排版系统、色彩理论、响应式布局、交互体验、动画动效、无障碍访问、性能优化八大维度,帮助开发者将普通页面升级为高品质产品级界面。
立即学习“前端免费学习笔记(深入)”;
-
fxp/composer-asset-plugin已失效,且未被正确卸载:运行composer global remove fxp/composer-asset-plugin,再删~/.composer/vendor/fxp - 你正在用 Composer 2.x,但没启用 asset-packagist:在
composer.json的repositories里加一段(注意顺序,放packagist.org之后):"repositories": [ { "type": "composer", "url": "https://asset-packagist.org" } ] - GitHub token 缺失导致 asset-packagist 拉取失败:访问 https://www.php.cn/link/f4380fd29ac34f2610014e8361d088fb 生成新 token,写入
composer.json的config.github-oauth字段
现在到底该用什么替代 bower
答案很明确:不用。Bower 自 2017 年起已归档(deprecated),asset-packagist 也在 2023 年底关闭服务,目前仅靠社区镜像勉强维持。所有新项目必须物理隔离前后端依赖:
- 前端资源全部走
npm install bootstrap jquery,构建产物(dist/)输出到public/assets - Yii2 的 AssetBundle 改为指向
public/assets/xxx,而非@bower - 在
composer.json的scripts中加post-install-cmd和post-update-cmd,自动触发npm ci && npm run build - CI/CD 流程中禁用任何
fxp或bower-asset相关逻辑,它们已是技术债
最易被忽略的一点:即使你强行让 bower-asset 在本地跑通,部署到生产环境时 GitHub API 限流、token 过期、DNS 解析失败都会让安装随机中断——这不是配置问题,是整条链路已被废弃的事实。

















