Ứng dụng Symfony của tôi có một số phụ thuộc chỉ được yêu cầu để phát triển, thử nghiệm và tương tự. Chúng được xác định trong số composer.json
của tôi trong phần require-dev
.Tại sao Symfony thiếu gói dev trong môi trường prod?
Dưới đây là cách tôi thêm chúng vào AppKernel.php
:
class AppKernel extends Kernel
{
public function registerBundles()
{
$bundles = array(
new Symfony\Bundle\FrameworkBundle\FrameworkBundle(),
new Symfony\Bundle\SecurityBundle\SecurityBundle(),
// ...
);
if (in_array($this->getEnvironment(), array('dev', 'test'))) {
$bundles[] = new Symfony\Bundle\WebProfilerBundle\WebProfilerBundle();
$bundles[] = new Sensio\Bundle\DistributionBundle\SensioDistributionBundle();
$bundles[] = new Sensio\Bundle\GeneratorBundle\SensioGeneratorBundle();
$bundles[] = new Doctrine\Bundle\FixturesBundle\DoctrineFixturesBundle();
$bundles[] = new Liip\FunctionalTestBundle\LiipFunctionalTestBundle();
}
return $bundles;
}
}
Khi tôi cập nhật ứng dụng của tôi, tôi chạy php composer.phar install --no-dev --optimize-autoloader
. Điều này cài đặt tất cả các yêu cầu không cần thiết cho môi trường dev và sau đó xóa bộ nhớ cache.
Tuy nhiên, bù trừ bộ nhớ cache không thành công với thông báo sau:
Đây không chỉ là một vấn đề với các Bundle thuyết Lịch thi đấu. Nếu tôi thay đổi thứ tự để Gói thử nghiệm chức năng Liip đến trước thì lỗi sẽ về gói đó.
Tại sao tôi thấy lỗi này? Tại sao Symfony cố gắng truy cập các gói này mặc dù chúng tôi không rõ ràng trong môi trường dev (chú ý đến cờ nhà soạn nhạc --no-dev
)? Và những gì tôi có thể làm để làm cho điều này biến mất mà không cần phải cài đặt tất cả các phụ thuộc dev trên máy sản xuất?
Nice! Biết được lựa chọn nhỏ này sẽ giúp giữ cho quy trình xây dựng sản xuất của tôi đơn giản và sạch sẽ. –