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

我在项目的根目录中有一个包含所有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?


慕神8447489
浏览 602回答 1
1回答

慕桂英4014372

它从未在运行时使用的 composer.json 文件。无论如何它没有用,它只被composer命令使用。如果您不在 composer生产机器上运行,则无需上传它。您的项目并没有失败,因为“您没有使用代码部署 composer.json”,而是因为您正在转储具有特定结构的自动加载器,您实际上在配置中提到了该composer.json结构,然后尝试使用不同的目录结构运行服务器.当您运行composer install并且composer dumpautoloader您的项目如下所示:composer.jsonsrc/ <--- 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内容。它不能保证工作并且它是一个脆弱的解决方案,但问题是您试图以与工具设计背道而驰的方式使用该工具。
打开App,查看更多内容
随时随地看视频慕课网APP