【问题标题】:Why can't I change a composer package namepace?为什么我不能更改作曲家包命名空间?
【发布时间】:2018-01-18 14:02:55
【问题描述】:

我很困惑为什么我不能更改作曲家包的命名空间。我正在我的供应商目录中运行一个带有包的 laravel 应用程序。

所以,我的composer.json 这个包包括:

{
    "autoload": {
        "psr-4": {
            "Spatie\\Backup\\": "src"
        }
    }
}

我想改变命名空间,例如:

{
    "autoload": {
        "psr-4": {
            "Spatie\\Backupdatabase\\": "src"
        }
    }
}

当我运行自动加载器时,文件vendor/composer/autoload_psr4.php 仍然包含原始命名空间,而不是更新后的命名空间。我试过跑步

$ composer clear cache

但这并没有什么不同。

我认为作曲家是通过在供应商目录中运行包以查找 composer.json 文件并从其中的“自动加载”部分自动加载来自动加载的,但我现在想知道是否是这种情况。

我错过了什么?为什么它不会自动加载新的命名空间?

更新

我认为编辑 composer.json 包中的命名空间没有更新 psr4 文件的原因是由于 installed.json 文件。该文件包含实际安装的内容和指定的命名空间。如果我更改此文件中包的命名空间并运行自动加载器,则更新的命名空间将生效。通过作曲家文档无法找到有关此文件的太多信息 - 我不确定它何时会被覆盖?

【问题讨论】:

  • 请注意,Spatie 命名空间已在使用中并已注册,请参阅packagist.org/packages/spatie。如果你依赖这些包中的任何一个,或者打算发布你的包,你可能会遇到问题。
  • 嗨@localheinz,我只是使用 Spatie 包来跟踪问题。我已经运行了自动加载器,它没有任何区别。谢谢
  • 运行自动加载器是什么意思?

标签: namespaces composer-php vendor


【解决方案1】:

调整composer.json中的自动加载配置后,需要运行

$ composer dump-autoload

参考见:

【讨论】:

  • 你试过我在这里建议的吗?这应该是公认的解决方案,因为这正是您需要做的。
  • 我已经运行 composer dump-autoload 但这本身不起作用。仅当我首先删除 composer 文件夹中的 installed.json 时才会发生更改。
【解决方案2】:

不建议更改命名空间,即使您已经分叉了包。相反,请考虑这样的事情......

  1. fork 包
  2. 只进行绝对需要的更改
  3. 将 fork 的位置添加到目标项目中 composer.json 的 repositories 部分(而不是 fork 包的 composer 文件)。
  4. Composer 现在应该将包的更改版本提取到项目的供应商目录中。
  5. 考虑提出拉取请求

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-04
    • 1970-01-01
    • 2015-02-02
    相关资源
    最近更新 更多