发布于2026-07-10 阅读(0)
扫一扫,手机访问
Composer 这东西,表面上看是个依赖管理工具,但说到“分环境装包”,很多人的第一反应可能是“它能不能自动识别环境然后装对应的包?”——答案是:想多了。Composer 根本不关心你运行在本地开发还是生产服务器上,它只认你传给它的命令参数。所谓的“分环境”,本质上是靠 require 和 require-dev 的职责分离,加上安装时显式传参来控制的。不是环境感知,而是命令驱动。

composer install 默认会装 phpunit、var-dumper 这些包因为这些包被写在了 require-dev 里。而 composer install 默认不加 --no-dev 的话,会把 require-dev 里的所有包一股脑全装进去——它才不管你是本地调试还是线上跑业务,只看参数。
require-dev 里的包参与 composer install 的默认安装流程,和 require 里的包一样,走解析、下载、解压、autoload 注册全流程。composer install,没加 --no-dev,结果生产镜像里塞进了 phpunit/、sebastian/、symfony/var-dumper/ 等一堆开发工具。composer.lock 文件会同时记录 packages(require)和 packages-dev(require-dev),但 --no-dev 只跳过后者安装,不会删除 lock 里的记录。所以 lock 文件里依然有 dev 包的信息。composer install --no-dev 到底跳过了什么它跳过 require-dev 声明的所有包的安装,也跳过这些包注册的 autoload 规则(比如 autoload-dev 里定义的 "Tests": "tests/")。但它不会影响 require 包的行为,也不影响你的业务代码。
vendor/ 目录下不会出现 phpunit/phpunit、mockery/mockery 等目录。vendor/composer/autoload_dev.php 文件不会生成——这是关键,漏删这个文件会导致类找不到的错误。new TestsFooTest(),即使 --no-dev 成功了,运行时依然会报错。这不是 Composer 的问题,是你代码逻辑越界了,生产环境不应该引用测试类。--no-dev 不影响 config.platform、scripts 或其他配置字段,它只作用于依赖安装阶段。--no-dev不能靠记忆,也不能靠环境变量自动判断。必须硬编码在命令里。CI 缓存、Docker 构建、PHAR 打包,每个环节都要显式声明,否则前一步缓存污染后一步部署。
RUN composer install --no-dev --optimize-autoloader --no-scripts。别用 ENV COMPOSER_NO_DEV=1,那样会影响所有后续命令,包括本地开发环境。--no-dev 标志,例如:composer-${{ hashFiles('**/composer.lock') }}--no-dev。否则缓存复用时可能把 dev 包带进生产构建。composer install && ./vendor/bin/phpunit;但构建生产镜像那一步,必须切回 --no-dev,两者不能混用。也就是说,测试和生产两条流水线要分开。--no-dev,还得手动删掉 vendor/composer/autoload_dev.php,否则 PHAR 加载时仍会尝试读取它。autoload-dev 不是给 PHPUnit 用的,是给你写的测试类用的。它只在本地跑完整 composer install 后才生效,生产环境即使配置再全也没用。
tests/ 目录里用了 MockeryLegacyMockInterface,除了把 mockery/mockery 放进 require-dev,还得确保 autoload-dev 包含 "Tests\\": "tests/",否则 new TestsFooTest() 仍会找不到类。composer dump-autoload --classmap-authoritative 在生产环境执行时,不会扫描 autoload-dev 路径。哪怕你忘了加 --no-dev,只要 vendor 里没装那些包,就扫不到。"config": {"dev": false} 一劳永逸——它会让本地开发也永远装不上 dev 包,连 composer require --dev 都失效,得不偿失。
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
8