Composer怎么安装插件 Composer怎么下载依赖包【教程】

5次阅读

Composer怎么安装插件 Composer怎么下载依赖包【教程】

composer require 安装插件时提示 Package not found

不是包名写错了,就是仓库源没配对。composer 默认只查 packagist.org,但很多公司私有插件或国内镜像未同步最新包,就会报这个错。

  • 先确认包名是否完整——比如想装 laravel 的调试工具,得写 composer require barryvdh/laravel-debugbar,少个 barryvdh/ 就找不到
  • 检查当前源:运行 composer config -g repo.packagist,如果返回的是 https://packagist.org,但你网络连不上,就得切镜像,比如国内常用 composer config -g repo.packagist composer https://packagist.phpcomposer.com(注意:该镜像已停用,推荐用 https://packagist.org + 代理,或阿里云源 https://mirrors.aliyun.com/composer/
  • 私有包必须提前配置 repositories,在 composer.json 里加一段:
    {"type": "vcs", "url": "https://git.example.com/my-plugin"}

    ,否则 require 直接忽略

composer install 和 composer update 行为差异很大

install 是照着 composer.lock 装,update 是按 composer.json 重新解析依赖树并更新锁文件。线上部署必须用 install,否则可能装出和开发环境不一致的版本。

  • composer install:跳过 composer.json 里的版本约束,只认 composer.lock 里锁定的提交哈希或确切版本号,快且确定
  • composer update:重新走一遍依赖解析,会升级所有允许范围内的包(比如 "monolog/monolog": "^2.0" 可能从 2.9.1 升到 2.10.0),还可能触发 post-update-cmd 脚本
  • CI/CD 流水线里误用 update 是常见事故源头——它会改 composer.lock,下次别人 git pull 后再 install,实际装的却是你上次 update 写死的版本

安装插件后命令不生效,比如 phpunitlarastan

Composer 插件分两类:一类是全局工具(如 phpstan/phpstan),另一类是项目内依赖(如 phpunit/phpunit)。后者默认不注册二进制命令,得手动加 bin 配置或用 vendor/bin/ 路径调用。

  • 确认插件是否声明了 bin 字段:看它的 composer.json 里有没有 "bin": ["phpunit"];没有的话,即使 require 进来了,也得用 vendor/bin/phpunit 显式调用
  • 全局安装(composer global require phpunit/phpunit)看似方便,但 PHP 版本、扩展差异会导致命令失效,而且 global 的路径容易被系统 PATH 忽略,不如项目内装 + vendor/bin/ 前缀可靠
  • 某些插件(如 laravel/pint)要求 Laravel >= 10,但你的项目是 9.x,require 成功了,命令却报 class not found——得看插件文档的 require 约束,别只信 Composer 的安装成功提示

依赖包体积太大,composer install 卡在 Downloading...

不是网速问题,是 Composer 默认下载完整 Git 仓库(含历史记录),尤其对 github 上的大仓库(比如 symfony/symfony)特别慢。它其实只需要某次 tag 的代码,但没设法绕过克隆。

  • 启用 dist 模式优先下载压缩包:在 composer.json
    "prefer-dist": true

    ,这是默认值,但如果之前手动改过 "prefer-source": true,就得删掉

  • 禁用 Git 克隆行为:运行 composer config --global github-protocols https,避免 ssh 协议卡在认证环节
  • 某些包(如 drupal/core)本身把测试文件、文档全打进 dist 包,可加 "archive": {"exclude": ["/tests/", "/docs/"]}composer.json,但仅限你自己维护的包;第三方包无法干预,只能接受体积

Composer 的坑不在命令怎么敲,而在它默认行为和你直觉不一致的地方——比如锁文件谁在读、dist 和 source 怎么选、全局 vs 局部命令路径。这些细节一旦跑偏,debug 成本远高于重装一次。

text=ZqhQzanResources