一个奇怪的设置,但遇到了一个项目,在本地环境中使用了作曲家来开始一个项目。原始开发人员无法使用SSH访问生产服务器,因此他在本地使用了作曲家,并使用FTP将"供应商"目录从桌面上传到服务器。
我现在需要添加phpmailer软件包,因此在我的Mac上本地完成以下操作:
cd Desktop/
composer require phpmailer/phpmailer
这在我的桌面上创建了以下结构:
Desktop/composer.json
Desktop/composer.lock
Desktop/vendor/autoload.php
Desktop/vendor/composer/*
Desktop/vendor/phpmailer/*
我需要通过FTP上传哪一个?我意识到vendor/phpmailer/*
是我想要的软件包,因此需要上传。
其他人呢?我已经有一个配置的自动加载器,因此这里不需要vendor/autoload.php
吗?
composer.json
我可以将软件包添加到已经存在的包装中,例如
"require": {
*other packages here*
"phpmailer/phpmailer": "^5.2"
}
但我不确定是否有必要,因为我不会在服务器上使用SSH/Composer运行任何更新?
通常的工作流将是:
- 从版本控件中查看当前版本。
- 通过命令行
composer require new/package
添加依赖项。 - 这将下载新软件包并更新自动加载。
- 在本地或测试网站环境上测试结果。
- 如果对结果满意,请将整个文件夹上传到生产服务器。
此一般工作流程可能有几个例外:
ad 1:如果没有版本控件,您现在可能会更好地启动本地GIT存储库,然后将当前的生产状态下载到它作为第一个提交中。没有版本控制会使事情变得更加困难,尤其是回到已知的工作版本。而且,由于生产服务器上的文件可能不受管理,因此您还将在新创建的版本控件中检查vendor
文件夹,以免取消对这些文件进行的任何更改。
ad 2:手动编辑composer.json
文件有时是一种更快的方法,即使您知道自己在做什么,但必须正确编辑JSON。对我来说,如果我已经准备好命令行,通常会太麻烦了。该命令还将选择适合已安装依赖项的匹配版本。手动编辑可能会导致您必须解开的版本冲突。切记仅安装与生产中PHP版本一起使用的依赖项。您可能应该运行composer config platform.php X.Y.Z
,以便将PHP的生产版本添加到composer.json
文件中,该文件可防止作曲家根据您的开发PHP安装依赖性版本。添加-g
交换机将将此设置添加到您的Global(用户)设置,这将影响您启动的所有作曲家操作以及其他项目。
ad 3:手动编辑将要求您在命令行上运行composer update
,因此可能没有理由不做composer require
。
ad 4:如何完成这完全取决于您必须使用的环境。
ad 5:在此阶段,您已经组装了创建工作网站所需的所有文件。除非上传以某种方式失败,否则将它们上传到生产将始终导致工作网站。如果您担心FTP不可靠,也可以使用一些"首先上传到临时文件夹,然后在服务器上移动"方法。有些人采用不同的方法:他们在生产服务器上有一个GIT存储库,他们只是将应该直播的版本推向该遥控器。然后,一些Pust Push脚本将运行composer install
。这种自动化方法也将起作用(但不使用FTP),但在部署过程中的风险更高,并且可能没有简单的方法可以回到以前的情况。
因此,最后我要说的是,通过FTP上传整个文件夹结构(嗯,该协议本身是不安全的,更好地用FTP(使用SSL的FTP),SFTP或SCP替换它,与在运行作曲家上的运行作曲家相比,更好生产服务器。
您有关要上传的文件夹的具体问题:所有文件夹。特别是上传整个vendor
文件夹。它包含当前的自动加载器和软件所需的所有依赖软件包。如果您正常工作,则将现有的composer.json
和composer.lock
文件与其他所有内容一起下载,并将新的依赖性添加到其中。这两个文件都更改了这两个文件,将新软件包添加到vendor
文件夹中,然后将类添加到自动加载器中。
不要摆弄仅上传vendor
文件夹的部分,也不要手动编辑自动加载的组件。如果您不正确地做一些方面,您只会为开发人员带来惊喜,这也需要更多时间。作曲家是管理依赖项的非常好的工具 - 使用它!
您可以将Composer.json从服务器复制到本地服务器,添加要求并运行Composer Update。
之后,您可以将所有文件(Composer.json,Composer.lock和vendor文件夹复制到您的服务器)...
或者您可以将本地供应商/phpmailer复制到服务器供应商文件夹中,搜索供应商/Composer/autoload_psr4.php中的phpmailer的条目,然后将其添加到服务器供应商/COMPOSER/autoload_psr4.php。用此方法还以相同的方式添加phpmailer的依赖项。
composer depends phpmailer/phpmailer