有点奇怪的设置,但遇到了一个项目,其中Composer已在本地环境中用于启动项目。原始开发人员没有对生产服务器的ssh访问权限,因此他在本地使用Composer并上传了供应商'使用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来运行任何更新?
答案 0 :(得分:2)
通常的工作流程是:
composer require new/package
添加依赖项。这个一般工作流程可能有几个例外:
广告1:如果没有版本控制,您现在可能更好地启动本地git仓库,并将当前生产状态作为第一次提交下载到其中。没有版本控制会使事情变得更难,尤其是回到已知的工作版本。由于生产服务器上的文件可能不受管理,因此您还要将vendor
文件夹签入新创建的版本控件中,以避免取消对这些文件所做的任何更改。
广告2:如果您知道自己在做什么,手动编辑composer.json
文件有时是获得所需内容的更快捷方式,但您必须正确编辑JSON。对我来说,如果我已准备好命令行,通常会有太多麻烦。该命令还将选择适合已安装的依赖项的匹配版本。手动编辑可能会导致您必须解开的版本冲突。请记住,只安装与生产中的PHP版本一起使用的依赖项。您可能应该运行composer config platform.php X.Y.Z
以将PHP的生产版本添加到composer.json
文件中,这会阻止Composer根据您的开发PHP安装依赖版本。添加-g
开关会将此设置添加到您的全局(用户)设置中,这将影响您启动的所有作曲家操作,也适用于其他项目。
广告3:手动编辑需要您在命令行上运行composer update
,因此可能没有理由不改为composer require
。
广告4:如何做到完全取决于您必须使用的环境。
ad 5:在此阶段,您已经汇集了创建工作网站所需的所有文件。将它们上传到生产将始终导致工作网站,除非上传以某种方式失败。你也可以使用一些"先上传到临时文件夹,然后在服务器上移动"如果您担心FTP会不可靠,那就接近。有些人采取了不同的方法:他们在生产服务器上有一个git存储库,他们只需将应该存在的版本推送到该远程存储库。一些推后脚本将运行composer install
。这种自动化方法也可以工作(但不使用FTP),但在部署期间出现故障的风险较高,并且可能没有简单的方法可以回到以前的情况。
所以最后我说通过FTP上传整个文件夹结构(好吧,该协议本身不安全,最好用FTPS(带SSL的FTP),SFTP或SCP替换它)与运行相比更好生产服务器上的Composer。
关于要上传哪些文件夹的具体问题:所有这些问题。特别是上传整个vendor
文件夹。它包含当前的自动加载器和软件所需的所有依赖包。如果您正常工作,则将现有的composer.json
和composer.lock
文件与其他所有文件一起下载并添加新的依赖项。这已经更改了这两个文件,将新包添加到vendor
文件夹,将类添加到自动加载器。
不要只上传vendor
文件夹的部分内容,或手动编辑自动加载的组件。如果您不正确地执行某些方面,您只会为开发人员带来惊喜,而且还需要更多时间。 Composer是一个非常好的管理依赖项的工具 - 使用它!
答案 1 :(得分:1)
您可以将composer.json从服务器复制到本地服务器,添加需求并运行编辑器更新。
之后,您可以将所有文件(composer.json,composer.lock和vendor文件夹)复制到您的服务器中......
或者您可以将本地供应商/ phpmailer复制到服务器供应商文件夹,在vendor / composer / autoload_psr4.php中搜索phpmailer的条目,并将其添加到您的服务器vendor / composer / autoload_psr4.php。
使用此方法也会以相同的方式添加phpmailers依赖项。
composer depends phpmailer/phpmailer