【问题标题】:How to add code to vendor folder manually如何手动将代码添加到供应商文件夹
【发布时间】:2022-11-12 07:01:30
【问题描述】:

我需要在我的本地机器上克隆我公司的一个项目。

问题:main中需要一个模块作曲家.json来自我们不再存在的旧代理,所以我没有下载它所需的访问密钥,但我有该模块的最新代码。

该模块的 composer.json 说它的名字是“randomgency/import”,所以我在vendor/randomagency/import 添加了代码。然后我从主 composer.json 中删除了该模块。

但我得到这个错误:

Class 'RandomAgency\ProcessPipelines\Helper\Condition\AbstractCondition' not found#0 /var/www/company/src/vendor/composer/ClassLoader.php(444): include()
#1 /var/www/company/src/vendor/composer/ClassLoader.php(322): Composer\Autoload\includeFile()
#2 [internal function]: Composer\Autoload\ClassLoader->loadClass()
#3 [internal function]: spl_autoload_call()

我的同事告诉我,我需要在 autoload 部分下的主 composer.json 中添加模块,但我不确定它是如何工作的。


解决它的最佳方法是创建一个新的 composer 包并用我自己的替换 composer.json 中的代理 URL,但我现在需要一个快速而肮脏的方法。

【问题讨论】:

    标签: composer-php vendor


    【解决方案1】:

    弄清楚了。必须像这样添加它:

    "autoload": {
        "psr-4": {
            "RandomAgency\Import\": "vendor/random-agency/import"
        },
    

    【讨论】:

      【解决方案2】:

      不要将它放入 vendor(因为它预计会及时删除和 vendor-dir is a configuration detail 的名称),所以从技术上讲,您已经将它放在了错误的位置。但是,这很容易恢复,只需使用不同的路径即可项目根目录,例如创建一个将包放入的目录(以下为pkg)。

      然后将该路径添加到项目自动加载配置中(参见autoload (Composer configuration schema) - Autoload mapping for a PHP autoloader.

      {
          "autoload": {
              "psr-4": {
                 "RandomAgency\Import\": "pkg/random-agency-import-4.2"
              }
          }
      }
      

      最好为包使用一个文件夹 - 而不是 vendor/package - 并在包版本的前面加上一个标识符。

      更好的想法是,如果该包仍然包含 composer.json 配置文件,请将其添加为 path repository 并要求它具有与 ./pkg/random-agency-import-3.12/composer.json#/version*/@dev 匹配的版本约束,如果“版本”成员是失踪:

      {
          "require": {
              "random-agency/import": "*"
          },
          "repositories": [
              {
                  "type": "path",
                  "url": "./pkg/random-agency-import-4.2"
              }
          ]
      }
      

      然后,您无需手动配置自动加载器,因为它取自库 composer.json 配置。这同样适用于任何其他配置部分,包括。它的依赖关系。

      的巨大好处小路存储库是,即接受相对的项目配置文件 (composer.json) 的路径。

      对比一下你之前的理解:

      解决它的最佳方法是创建一个新的 composer 包并用我自己的替换 composer.json 中的代理 URL,但我现在需要一个快速而肮脏的方法。

      你要么现在已经解决了(你需要的包有一个composer.json文件)要么你仍然需要添加包信息,但你不需要创建一个新的打包或交换 URL。

      那是因为您也可以在 Composer 中使用包存储库现在有了path如果您仔细查看/repositories/0/package,您会发现这是另一个composer.json 文档,就在该位置内联(并且/dist 成员是新成员):

      {
        "repositories": [
          {
            "type": "package",
            "package": {
              "name": "random-agency/import",
              "version": "4.2.0",
              "dist": {
                "type": "path",
                "url": "./pkg/random-agency-import-4.2"
              },
              "autoload": {
                "psr-4": {
                    "RandomAgency\Import\": ""
                }
              }
            }
          }
        ],
        "require": {
          "my/package": "4.2"
        }
      }
      

      当您进行更新等操作时,Composer 会将包文件安装到供应商文件夹中(无论它可能在哪里,无论您多久删除一次)。

      如果 - 且仅当 - 没有 ./pkg/random-agency-import-3.12/composer.json 文件,您将需要创建一个“包”,因为那是最后的 composer.json。与您将自动加载部分添加到 composer.json 类似,您也可以将该目录添加到包中(创建您自己的 ./pkg/random-agency-import-3.12/composer.json 文件)或将该包信息作为包添加到存储库条目下的项目自己的配置文件中。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-05-04
        • 1970-01-01
        • 2019-06-15
        • 2022-12-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多