Php 仅部署生成的代码,不部署composer.json文件,并使用;“供应商”;在「;src";目录

Php 仅部署生成的代码,不部署composer.json文件,并使用;“供应商”;在「;src";目录,php,deployment,composer-php,Php,Deployment,Composer Php,我有一个项目,项目的根目录中有所有的composer.json,phpunit.xml,等等 所有.php源代码都位于src/ 我已将composer.json配置如下: { "name" : "myproj", "config" : { "vendor-dir" : "src/vendor" }, "autoload" : { "psr-4" : { "myclasses\\" : "src/classes" } } } 这在我的开发机

我有一个项目,项目的根目录中有所有的
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():在第444行的/var/www/test/vendor/composer/ClassLoader.PHP中打开“/var/www/test/vendor/composer/../../../../../../src/classes/myclasses/core/messages/MessageList.PHP”以包含(include_path=':/usr/share/PHP')


我能做一个聪明的配置吗?或者我被迫将
composer.json
(我认为这是生产中不需要的元数据)移动到
/src

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

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

运行
composer install
composer dumpautoloader
时,您的项目如下所示:

composer.json

src/如果它是
/var/www/test/src/classes
,你就不会真的想要
/var/www/test/classes
src
中的所有内容都在
/var/www/test
中,我希望自动加载器跳过
/../src
部分“我希望自动加载器跳过/。/src部分”-所以在composer.json文件中更改它?您可以将名称空间“MyClass”指向任何您想要的位置。部署服务器上不需要的“项目元数据”是什么?composer.json文件?您如何部署应用程序?您不能只设置部署脚本来处理正在部署的内容吗?它不是这样工作的,您需要更改composer.json并删除
src/
,然后运行
composer du
,但很明显,当你有时间的时候,它在本地就不起作用了src@MagnusEriksson我在jenkins服务器上运行
composer install
composer-o dumpautoloader
,然后将其scp到没有composer的目标服务器,等等。ofc我可以始终在部署目录中保留
composer.json
,然后删除它,这样它就不在目标服务器上了。我喜欢你的答案,但不能使用它。我必须在无法修改路径的主机(在prod中)上使用它,因此必须部署到某个文件夹。我喜欢元文件(如Jenkinsfile、phpunit.xml、phpmd、.git folder、.gitignore)和未在生产中部署的测试类的对称性。基于这些注释,我将把
composer.json
移动到
src
文件夹中,然后从部署服务器中删除它。但是您不能用其他任何方法来完成。无论何时生成自动加载器,服务器上的结构都需要与目录结构相匹配。或者,您需要在开发(您的计算机)和构建计算机中使用不同的composer.json文件。这看起来像是在寻找问题。我只是希望,既然我可以定义
供应商
文件夹的路径,我就可以更好地控制它的工作方式。问题是,当您运行
composer dumpautoload
时,您只有一个配置,然后,您希望在与该配置不匹配的设置中使用生成的自动加载。如果你仔细想想,你就会意识到这是一个有问题的命题。