Composer不会自动加载自定义程序包

问题描述

致谢: 首先,这是我的第一篇求助文章,因为我浏览了很多有关stackoverflow和其他资源的文章,但找不到解决方法

问题听起来很熟悉,但我只是想不通,也许是因为我现在坚持了2天。另一个注意事项,这是我的第一个程序包,是的,我不是100%知道自己在做什么。

结构:

- laravel-project 
    - ...
    - packages
        - my-custom-package
            - src
                - MyCustomPackageServiceProvider.PHP
            - composer.json
    - public
    - resources
    - routes
    - ...
    - composer.json

所以这是基本的Laravel 5.8 +在内部添加的package文件夹中,用于本地软件包的分发(它也已移至repo)

当前代码(简化为其实际工作项目):

文件:laravel-project / packages / my-custom-package / composer.json

{
    "name": "company/my-custom-package","type": "library","require": {
        "PHP": ">=7.2",},"require-dev": {
        "ext-curl": "*"
    },"authors": [
        {
            "name": "John Smith","email": "[email protected]"
        }
    ],"autoload" : {
        "prs-4": {
            "Company\\MyCustomPackage\\": "src/"
        }
    },"minimum-stability": "dev"
}

文件:laravel-project / packages / my-custom-package / src / MyCustomPackageServiceProvider.PHP

<?PHP

namespace Company\MyCustomPackage;

use Illuminate\Support\ServiceProvider;

class MyCustomPackageServiceProvider extends ServiceProvider {

    public function boot()
    {
        $this->loadRoutesFrom(__DIR__ . '/routes/web.PHP');
        $this->loadMigrationsFrom(__DIR__ . '/database/migrations');
    }

    public function register()
    {

    }

}

文件:laravel-project / composer.json

{
    "name": "laravel/laravel","type": "project","description": "The Laravel Framework.","keywords": [
        "framework","laravel"
    ],"license": "MIT","repositories": [
        {
            "type": "path","url": "~/testlaravel/packages/my-custom-package","options": {
                "symlink": true
            }
        }
    ],"require": {
        "PHP": "^7.1.3","fideloper/proxy": "^4.0","laravel/framework": "5.8.*","laravel/tinker": "^1.0","guzzlehttp/guzzle": "^6.3.3","company/my-custom-package": "dev-master"
    },"require-dev": {
        "beyondcode/laravel-dump-server": "^1.0","filp/whoops": "^2.0","fzaninotto/faker": "^1.4","mockery/mockery": "^1.0","nunomaduro/collision": "^3.0","PHPunit/PHPunit": "^7.5"
    },"config": {
        "optimize-autoloader": true,"preferred-install": "dist","sort-packages": true
    },"extra": {
        "laravel": {
            "dont-discover": []
        }
    },"autoload": {
        "psr-4": {
            "App\\": "app/"
        },"classmap": [
            "database/seeds","database/factories"
        ]
    },"autoload-dev": {
        "prs-4": {
            "Company\\MyCustomPackage\\": "~/testlaravel/packages/my-custom-package/src"
        }
    },"minimum-stability": "dev","prefer-stable": true,"scripts": {
        "post-autoload-dump": [
            "Illuminate\\Foundation\\ComposerScripts::postAutoloadDump","@PHP artisan package:discover --ansi"
        ],"post-root-package-install": [
            "@PHP -r \"file_exists('.env') || copy('.env.example','.env');\""
        ],"post-create-project-cmd": [
            "@PHP artisan key:generate --ansi"
        ]
    }
}

说明::〜​​/ testlaravel /是Vagrant机器中项目原始位置的文件夹路径url是“ packages / my-custom-package”,但更改了此扩展版本,只是为了使它正常工作

文件:config / app.PHP添加的服务提供商)

Company\MyCustomPackage\MyCustomPackageServiceProvider::class

问题: 首先,我将这个东西设置为本地,并且它的工作原理如下: “ 从头开始创建Laravel Composer程序包以上传到packagist ”作者: Bitfumes ,并且程序包有效,我可以运行composer update,然后将其添加到app.PHP我的程序包中,我可以运行自定义路线,并且一切正常。 之后,我将包移至git repo,并以同样的方式要求它,只是将“存储库”字段更改为

    "repositories": [
        {
            "type": "vcs","url": "[email protected]:john/my-custom-package.git"
        }
    ]

,当您运行composer update时,您会看到,在供应商/文件中之后,您都有包含文件夹的Company文件夹,但是,如果您离开config / app.PHP服务提供商,它会开始抱怨说 *Class 'Company\MyCustomPackage\MyCustomPackageServiceProvider' not fo und*

经过一段时间的f ***之后,我发现是的,我的autoload_classmap(不能记住原始帖子)不包含我的包,所以今天我决定再次尝试在本地查看是否存在差异,是否将其添加到地图文件中,现在我在需要本地软件包时遇到相同的错误,我无法使其正常工作。

我一直在删除供应商文件夹和锁定文件,作曲家dump-autoload,但这没有帮助。我只是觉得还有什么超级缓存吗?

!!更新!! 我什至不更加困惑。在composer.json中(我现在在实际项目存储库上测试过的一个项目,现在需要另外2个本地git存储库)。因此,我现在在vendor / Company / {4packages}中有4个软件包,我比较了所有4个软件包composer.json,虽然没有发现任何重大区别,但是除了我的以外,所有其他软件包都已加载到自动加载映射中。我只能看到的主要区别是,这两个软件包不使用ServiceProvider.PHP文件,但我看不到它如何影响或改变事物。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)