Php Composer自动加载程序、github和部署

Php Composer自动加载程序、github和部署,php,github,deployment,ftp,composer-php,Php,Github,Deployment,Ftp,Composer Php,如果以前有人问过我这个问题,我很抱歉,但在搜索了一段时间后,我真的找不到我的困境的答案 我是PHP项目团队的一员,我们使用github进行版本控制。我们希望实现一个PSR-4自动加载器,每个指南都使用Composer,所以我们也会这样做。现在,在搜索过程中,我了解到供应商文件夹不应该包含在github中,而应该只包含composer.json,每个开发人员都需要在自己的计算机上安装composer 这是否需要在每台计算机上重新创建自动加载器 最后,当项目完成后,我们想把它上传到我们的网站上,但唯

如果以前有人问过我这个问题,我很抱歉,但在搜索了一段时间后,我真的找不到我的困境的答案

我是PHP项目团队的一员,我们使用github进行版本控制。我们希望实现一个PSR-4自动加载器,每个指南都使用Composer,所以我们也会这样做。现在,在搜索过程中,我了解到供应商文件夹不应该包含在github中,而应该只包含composer.json,每个开发人员都需要在自己的计算机上安装composer

这是否需要在每台计算机上重新创建自动加载器

最后,当项目完成后,我们想把它上传到我们的网站上,但唯一的方法是通过FTP


哪些文件应该上传到live网站,自动加载程序会发生什么情况?

您还需要提交composer.lock文件。这一点非常重要——这意味着,每当其他人签出代码时,他们都会在他们的/vendor目录中安装相同的依赖项集(包括其确切版本)

这就是为什么不需要提交/vendor目录的原因——锁文件负责确保依赖关系是固定的

json定义了许多满足需求的依赖项的潜在版本。运行
composer update
主要检查是否有满足这些要求的最新版本可用。这就是安装和更新之间的区别——安装离开了锁定文件,知道要查找什么——更新离开了json文件,可能会在不同的时间点返回不同的结果

在composer.json中,您可以通过告诉自动加载程序根命名空间所在的位置来定义自动加载程序

"autoload": {
    "psr-4": {
        "RootNamespace\\": "library/src"
    }
},
当您的同事运行了
composer install
后,它将以一致的路径为他们创建自动加载器

您有以下部署选项:

您可以上载composer.lock文件并在生产环境中运行composer安装,也可以提前执行此操作并作为构建的一部分上载供应商目录

如果此时出现问题,我希望在更改生产服务器上的任何文件之前了解它,我会这样做。另一种选择可能会导致产品升级失败,缺少依赖项。首先安装这些依赖项,然后一次性传输所有内容,这样更安全


顺便说一句,我还喜欢在生产环境中的一个单独文件夹中安装一个新版本,该文件夹以git提交命名,然后作为部署步骤的一部分对其进行符号链接。这样可以确保在等待上载其余文件时,不会有半更新的应用程序。这种方法还可以消除前面提到的问题,这意味着您可以从生产环境中安装composer。

只需额外注意一下
composer.lock
。它不仅确保您获得相同的依赖项,还确保获得完全相同的版本(只是认为值得指出)。此外,在将文件上载到productions服务器之前,请运行:
composer install--no dev--optimize autoloader
,以确保您只获得相关的软件包(忽略开发软件包)和优化的autoloader(不需要搜索IO来查找类)。是的,这就是我的意思(关于版本)但是我还不够具体-谢谢你指出。Symlinks FTW。如果需要,还可以轻松地恢复到以前的版本。