为了账号安全,请及时绑定邮箱和手机立即绑定

仅部署生成的代码,没有 composer.json 文件,并且在“src”目录中使用“vendor”

仅部署生成的代码,没有 composer.json 文件,并且在“src”目录中使用“vendor”

PHP
慕神8447489 2022-01-24 09:24:16
我在项目的根目录中有一个包含所有composer.json,phpunit.xml等的项目。所有的.php来源都在src/我已将 composer.json 配置如下:{  "name" : "myproj",  "config" : {    "vendor-dir" : "src/vendor"  },  "autoload" : {    "psr-4" : {      "myclasses\\" : "src/classes"    }  }}这在我的开发机器上运行良好。问题是我只想部署src目录的内容,这样我就不会在部署服务器上获取所有项目元数据。不幸的是,自动加载器会寻找类/var/www/test/vendor/composer/../../../src/classes/而不是例如/var/www/test/vendor/composer/../../classes/PHP 警告:include(): 未能打开 '/var/www/test/vendor/composer/../../../src/classes/myclasses/core/messages/MessageList.php' 以包含(include_path=' .:/usr/share/php') 在 /var/www/test/vendor/composer/ClassLoader.php 第 444 行我可以做一个聪明的配置吗?还是我被迫移动composer.json(我认为这是生产不需要的元数据)/src?
查看完整描述

1 回答

?
慕桂英4014372

TA贡献1871条经验 获得超13个赞

它从未在运行时使用的 composer.json 文件。无论如何它没有用,它只被composer命令使用。如果您不在 composer生产机器上运行,则无需上传它。


您的项目并没有失败,因为“您没有使用代码部署 composer.json”,而是因为您正在转储具有特定结构的自动加载器,您实际上在配置中提到了该composer.json结构,然后尝试使用不同的目录结构运行服务器.


当您运行composer install并且composer dumpautoloader您的项目如下所示:


composer.json

src/ <--- this is where autoloader looks for your files.

--- yourCode/

--- moreCode/

--- vendor/

------ autoloader.php

但是然后在您的服务器上,您在您的服务器上


yourCode/

moreCode/

vendor/

--- autoload.php <--- this can't find the 'src' directory

解决方案不是上传目录的内容,src而是上传src目录本身。


任何其他需要使用自动加载器的脚本和其余代码都应该包含在内/var/www/test/src/vendor/autoload.php,并且一切都会正常工作。


如果你不想在src里面有一个目录test,那么你不应该在自动加载器生成期间拥有它。不要使您的开发和登台环境与您的生产环境不同。


你唯一的选择是在你的构建机器上做:


跑 composer install

搬到composer.json_src

更改composer.json因此键上声明的路径autoload不提及src

跑 composer dumpautoload

删除 composer.json

上传src内容。

它不能保证工作并且它是一个脆弱的解决方案,但问题是您试图以与工具设计背道而驰的方式使用该工具。


查看完整回答
反对 回复 2022-01-24
  • 1 回答
  • 0 关注
  • 601 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信