Error on Artisan commands when updating Composer dependencies

后端 未结 5 1746
离开以前
离开以前 2021-02-13 17:09

I am developing a library for Laravel which contains a service provider. I have added this library to another project\'s composer.json file.

The compo

相关标签:
5条回答
  • 2021-02-13 17:48

    It looks like you're simply not including your ServiceProvider. Put this in your root project's composer.json:

    {
        "autoload": {
            "psr-4": {
                "App\\": "app/",
                "MyName\\MyProject\\": "../relative/path/to/serviceprovider/"
            }
        }
    }
    
    0 讨论(0)
  • 2021-02-13 17:49

    Run This

    composer install --ignore-platform-reqs
    
    0 讨论(0)
  • 2021-02-13 17:50

    When using composer install or composer update you can use --no-scripts option to skips execution of scripts defined in composer.json.

    e. g.: composer update --no-scripts.

    Source: https://getcomposer.org/doc/03-cli.md#install

    0 讨论(0)
  • 2021-02-13 17:57

    Edit

    This issue has finally been resolved as of laravel/framework:v5.2.25 and laravel/laravel:v5.2.27, and backported to laravel/framework:v5.1.33 and laravel/laravel:v5.1.33.

    This fix includes a change to the Laravel application (laravel/laravel), in addition to the Laravel Framework (laravel/framework). To implement, you will need to:

    1) Update the scripts section of your composer.json file to match that in the laravel/laravel package. Specifically:

    • remove the pre-update-cmd section
    • in the post-install-cmd section, replace "php artisan clear-compiled" with "Illuminate\\Foundation\\ComposerScripts::postInstall"
    • in the post-update-cmd section, replace "php artisan clear-compiled" with "Illuminate\\Foundation\\ComposerScripts::postUpdate"

    2) Once you have updated your composer.json, run a composer update. If you only want to update the framework, you can run composer update laravel/framework.


    Original

    After looking over the Github issue you posted in the comments, as well as the related issues, you may be in for a bit of a wait. Taylor would like to put a script in vendor/bin and change composer.json to run that, but it looks like they are waiting for a PR from the community, and won't actually implement this themselves.

    You haven't done anything wrong; your autoloading is setup correctly. The issue is with Laravel right now.

    Moving the command to the post-update-cmd script doesn't work because artisan will always try to load the cache files when they exist. When running the clear-compiled command, artisan loads the cache files (part of startup) before it ever tries to delete them.

    Your best bet is to manually delete the cache files before artisan gets run. And, you need to do it outside of Laravel/Artisan. So, you can manually delete the files, or you can create a little script to do it and add that to your composer.json file (for your main project, not your package).

    Files to delete:

    • Laravel 5.2:
      bootstrap/cache/compiled.php
      bootstrap/cache/services.php
    • Laravel 5.1:
      bootstrap/cache/compiled.php
      bootstrap/cache/services.json
    • Laravel 5.0:
      vendor/compiled.php
      storage/framework/compiled.php
      vendor/services.json
      storage/framework/services.json
    0 讨论(0)
  • 2021-02-13 18:10
    composer update --no-scripts
    

    this command will ignore command defined in composer.json,otherwise it will excute laravel command which will check if serviceProvider is loaded.

    0 讨论(0)
提交回复
热议问题