返回

Composer 开发/生产部署中“古怪”之处:如何避免开发依赖项进入生产环境?

php

Composer 开发/生产部署怪异之处

作为一名软件开发人员,您是否在Composer中遇到过开发和生产部署之间的奇怪差异?require-dev 块原本旨在仅在开发环境中加载依赖项,但在2013年的一次重大更新之后,这些依赖项现在默认安装,即使是在生产服务器上。

让我们深入了解这个问题,并探索一个可靠的解决方案,以避免在生产环境中安装开发工具。

问题:

以往的理解是,require-dev 块中的依赖项仅在运行 composer install --dev 命令时加载。然而,现在这些依赖项在执行 composer install 时也会默认安装。这可能会导致将开发工具(如调试器和测试框架)部署到生产环境中,从而带来潜在的安全性风险。

解决方法:

1. 修改 composer.json

  • 删除 require-dev 块中的所有依赖项,或删除整个块。

2. 创建 composer.json.prod

  • 创建一个名为 composer.json.prod 的新文件,其中包含生产环境所需的依赖项。

3. 部署 composer.json.prod

  • composer.json.prod 文件部署到生产服务器。

4. 安装依赖项:

  • 在生产服务器上运行以下命令:
composer install --prefer-dist --no-dev
  • --prefer-dist 选项可确保优先安装包的预编译版本(如果可用),从而提高性能。
  • --no-dev 选项显式排除安装开发依赖项。

其他考虑因素:

  • 确保在生产环境中使用的代码与开发环境中使用的代码相同。
  • 如果需要在生产环境中使用开发工具,可以考虑使用不同的Composer配置文件。
  • 在使用此方法时,确保 composer.lock 文件与 composer.json.prod 文件相匹配。

结论:

遵循这些步骤,您可以有效地避免将开发依赖项部署到生产环境中。通过分离开发和生产环境的Composer配置文件,您将提高应用程序的安全性,确保开发工具仅在必要时才使用。

常见问题解答:

1. 我怎样知道我是否正确地分离了我的开发和生产依赖项?

  • 检查您的 composer.lock 文件是否与 composer.json.prod 文件匹配。

2. 我可以在生产环境中使用开发工具吗?

  • 是的,但建议使用不同的Composer配置文件或在单独的环境中安装开发工具。

3. 为什么 --prefer-dist 选项很重要?

  • 它通过优先安装预编译包来提高应用程序性能。

4. 什么是 composer.jsoncomposer.json.prod 文件?

  • 它们是项目依赖项和版本的配置文件。composer.json.prod 专门用于生产环境。

5. 我需要修改 composer.lock 文件吗?

  • 仅当 composer.json.prod 的更改需要更新 composer.lock 文件时才需要修改。