我对使用Composer有所了解。要清楚,我正在使用Windows 10和wampstack包。
里面..wampstck .. \ php我擦掉了任何现有的文件夹\ vendor
对于一个项目,我从Packagist下载了checkdomain / holiday。然后我将\ vendor移动到apache2 \ htdocs并最终转移它,另一个 文件,通过FTP到外部网站,一切正常。
然后我为另一个包phpmailer / phpmailer完成了相同的操作。但是在这种情况下,\ vendor不仅包含邮件的文件,还包含我几周没有触及的早期checkdomain / holiday。
似乎\供应商现在包含子文件夹\ composer,\ phpmailer和\ checkdomain。后两个子文件夹包含一个文件composer.json 显然包含与该项目有关的材料,而不是其他任何内容。
然而,\ vendor \ composer包含一个名为installed.json的文件,它引用了phpmailer,checkdomain(事实上,还有我查看过的所有其他软件包)
我有两个问题:
如果我在通过写入从Packagist调用新包之前擦掉了文件夹\ C:.... \ php \ vendor 在命令提示符下> composer需要phpmailer / phpmailer,那么系统是如何知道的,并且它应该下载,\ checkdoain包。
我清楚地知道该项目不需要的网站。我的FTP \ vendor到网站,但它包含一个 folder \ composer,其文件名为installed.json,其中包含有关以前项目的信息,无法使用。
答案 0 :(得分:3)
项目的依赖项,类映射和其他定义存储在项目的composer.json
文件中。当您在项目根目录中并键入composer require package
时,composer.json文件将使用新要求进行更新。要回答第一个问题,这个依赖项可能仍然存在于项目的composer.json文件中,或者它作为phpmailer在composer.json文件中的依赖项存在。
在composer.lock
中跟踪当前安装的软件包,因此您可以将composer.lock
和composer.json
复制到新环境并键入composer install
以安装相同的软件包版本。理想情况下,您可以执行此操作,而不是将供应商文件夹复制到新环境(前提是您具有多个FTP访问权限)。
我认为你过分思考这一切,只是让Composer管理软件包,不要尝试手动管理文件。 Composer的重点是为您管理包及其依赖项。要回答你的第二个问题,为什么要转移一些额外的小文件呢?看起来你正在给自己造成不必要的麻烦。
简而言之,请勿删除或修改供应商目录中的文件。删除依赖项的方法是通过命令行工具:composer remove package
或编辑composer.json
并使用composer update
进行更新。
答案 1 :(得分:0)
为了使您的供应商文件夹更易于部署到Web服务器,您可以做的一件事是将整个供应商文件夹打包为.phar文件。 https://github.com/mpyw/comphar。 通过ftp或其他方式进行复制时,这可以使您更快地进行部署。而且,它将减少您在Web主机上的文件限制。