有点奇怪的设置,但遇到了一个项目,其中 Composer 已在本地环境中用于启动项目。最初的开发人员没有对生产服务器的 ssh 访问权限,因此他在本地使用 Composer,并使用 FTP 将“供应商”目录从他的桌面上传到服务器。
我现在需要添加PHPMailer包,因此在我的 Mac 本地完成了以下操作:
cd Desktop/
composer require phpmailer/phpmailer
Run Code Online (Sandbox Code Playgroud)
这在我的桌面上创建了以下结构:
Desktop/composer.json
Desktop/composer.lock
Desktop/vendor/autoload.php
Desktop/vendor/composer/*
Desktop/vendor/phpmailer/*
Run Code Online (Sandbox Code Playgroud)
我需要通过 FTP 上传哪些文件?我意识到vendor/phpmailer/*
是我想要的包,所以需要上传。
其他人呢?我已经配置了自动加载器,所以vendor/autoload.php
这里不需要猜测?
composer.json
我可以将包添加到已经存在的包中,例如
"require": {
*other packages here*
"phpmailer/phpmailer": "^5.2"
}
Run Code Online (Sandbox Code Playgroud)
但我不确定这是否有必要,因为我不会在服务器上使用 ssh/Composer 来运行任何更新?
通常的工作流程是:
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
switch 会将此设置添加到您的全局(用户)设置中,这将影响您启动的所有 Composer 操作,也适用于其他项目。
广告 3:手动编辑将要求您composer update
在命令行上运行,因此可能没有理由不这样做composer require
。
广告 4:如何做到这一点完全取决于您必须使用的环境。
广告 5:在此阶段,您已经组装了创建工作网站所需的所有文件。除非上传失败,否则将它们上传到生产环境总是会导致网站正常工作。如果您担心 FTP 不可靠,您还可以使用一些“先上传到临时文件夹,然后在服务器上移动”的方法。有些人采取不同的方法:他们在生产服务器上有一个 git 存储库,他们只是将应该上线的版本推送到该远程存储库上。composer install
然后将运行一些 post-push 脚本。这种自动化方法也可以工作(但不使用 FTP),但在部署过程中出现故障的风险更高,并且可能无法轻松恢复到以前的情况。
所以最后我会说,与在生产服务器上运行 Composer 相比,通过 FTP 上传整个文件夹结构(好吧,该协议本身不安全,最好用 FTPS(带 SSL 的 FTP)、SFTP 或 SCP 替换它)更好.
您关于要上传哪些文件夹的具体问题:全部。特别是上传整个vendor
文件夹。它包含当前的自动加载器和软件需要的所有依赖包。如果你工作正确的,你下载的现有composer.json
和composer.lock
其它一切文件一起,并添加了新的依赖于它。这已更改这两个文件,将新包添加到vendor
文件夹并将类添加到自动加载器。
不要只上传vendor
文件夹的一部分,或者手动编辑自动加载的组件。如果你做错了一些方面,你只会给后面的开发者带来惊喜,而且也需要更多的时间。Composer 是一个非常好的管理依赖项的工具——使用它!