gpt4 book ai didi

php - 使用docker多阶段构建为生产环境构建应用程序时如何删除composer dev依赖关系?

转载 作者:行者123 更新时间:2023-12-02 19:21:25 37 4
gpt4 key购买 nike

我正在使用多阶段构建作为CI / CD管道将php应用程序构建到Docker镜像中:

FROM etable/php7.2-dev as build

COPY . /var/www/html/
RUN composer install --dev
RUN echo "Run unit tests" && ./vendor/bin/phpunit
RUN echo "Remove unit tests" && rm -rf /var/www/html/tests
RUN echo "Remove webpack" && rm -rf webpack.mix.js

FROM etable/php7.2

RUN mkdir /usr/share/myapp
WORKDIR /usr/share/myapp
COPY --from=build /var/www/html/ .

RUN chown www-data:www-data /usr/share/myapp \
&& find /usr/share/myapp -type f -exec chmod 644 {} \
&& find /path/to/laravel -type d -exec chmod 755 {}

WORKDIR /var/www/html
VOLUME /var/www/html

但是在阶段构建中,我正在安装dev依赖项以运行单元测试。那是因为在 composer.json上phphunit被定义为dev依赖项:
{
"name": "laravel/laravel",
"type": "project",
"description": "The Laravel Framework.",
"keywords": [
"framework",
"laravel"
],
"license": "MIT",
"require": {
"php": "^7.2",
"fideloper/proxy": "^4.0",
"laravel/framework": "^6.2",
"laravel/tinker": "^2.0"
},
"require-dev": {
"facade/ignition": "^1.4",
"fzaninotto/faker": "^1.4",
"mockery/mockery": "^1.0",
"nunomaduro/collision": "^3.0",
"phpunit/phpunit": "^8.0"
},
"config": {
"optimize-autoloader": true,
"preferred-install": "dist",
"sort-packages": true
},
"extra": {
"laravel": {
"dont-discover": []
}
},
"autoload": {
"psr-4": {
"App\\": "app/"
},
"classmap": [
"database/seeds",
"database/factories"
]
},
"autoload-dev": {
"psr-4": {
"Tests\\": "tests/"
}
},
"minimum-stability": "dev",
"prefer-stable": true,
"scripts": {
"post-autoload-dump": [
"Illuminate\\Foundation\\ComposerScripts::postAutoloadDump",
"@php artisan package:discover --ansi"
],
"post-root-package-install": [
"@php -r \"file_exists('.env') || copy('.env.example', '.env');\""
],
"post-create-project-cmd": [
"@php artisan key:generate --ansi"
]
}
}

(我使用默认的laravel作为示例,并测试了多阶段构建,但这适用于使用composer并将phpunit作为dev依赖项的任何php项目。)

但是我有这个问题。在运行php单元测试之后,我不再需要composer dev依赖关系,因此在进入下一阶段之前,我需要将其删除,因为我已经安装了依赖关系,因此重新下载它们将使构建过程变慢。

那么,如何使用composer删除dev依赖并保留生产用的依赖呢?

最佳答案

由于没有人回答,我将提供更可靠的解释。首先,对术语进行一些澄清。您不应该从composer项目中删除dev依赖关系,而应该首先部署没有这些依赖关系的项目。您可以通过提交composer.lock文件并使用composer install --no-dev --optimize-autoloader部署提交(最好是标记)来完成此操作。这将产生一个vendors文件夹,其中包含所有锁定的软件包版本(来自composer.lock),而没有dev依赖项。以防万一,请不要将vendors文件夹提交到VCS。

关于php - 使用docker多阶段构建为生产环境构建应用程序时如何删除composer dev依赖关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59416921/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com