当使用laravel框架处理同一项目的多个开发人员具有不同的本地laravel/vendor/composer/*
文件时,如何解决问题?
想象一下,我们有一个生产服务器,在那里我们不再运行composer(或者我们应该这样做吗?)。要将所有文件投入生产,开发人员必须在本地执行composer update
,因此laravel将动态创建/更改文件,例如文件夹vendor/composer/
中的文件。开发人员将这些文件提交到生产环境中,它就可以工作了。
但在我的同事提交后,我想更新我的svn
。这意味着它还将更新动态创建的文件,例如,这些文件将错过我当前的工作更改。因此,我必须在本地实例上运行composer更新,以实现同事的更改,并包含我当前(仍然未提交)的更改。
在每次svn更新后,总是在localhost上运行composer update
,这是一种正常的好做法吗?
有很多问题,但我想我理解你的问题。
首先,请确保您没有控制供应商目录的版本。composer.json和composer.lock都应该处于版本控制之下。
如果有人通过composer安装了一个新包,那么所有其他开发人员都应该在获得新代码后进行"composer install"。
在生产中,始终运行"composer install",从不运行"complexer update"。
"Composer update"应该以可控的方式运行,因为它所做的是用新版本更新所有包(根据Composer.json设置)。
想象一下,我们有一个生产服务器,在那里我们不再运行composer(或者我们应该这样做吗?)。
您应该在生产服务器上运行以下程序来部署新代码:
php artisan down
git pull origin master
composer install
php artisan migrate
php artisan up
您的版本控制中应该包含"composer.lock",这样所有开发人员(和生产服务器)都可以使用相同版本的/供应商文件
在生产中运行composer不是有安全风险吗?
绝对不是-这是标准做法(假设你有composer.lock)。composer.lock确保你的服务器获得完全相同的文件。如果你查看composer.lock内部,你会看到等物品
"url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/cde7a00d1410a17fb6d61b993cb017a78be1137c",
如果一个温和的人添加了一个新版本的包,它将不会有相同的哈希拉链球位置,所以你仍然会收到你期望的正确版本。