Be part of JetBrains PHPverse 2026 on June 9 – a free online event bringing PHP devs worldwide together.

dr24's avatar
Level 2

How to put custom composer package outside of vendor folder in Laravel?

I need to put my zodiac package from vendor folder to packages folder in my root laravel directory in order to customize some data. Currently I made packages folder in root, cut my zodiac folder from vendor/intervetion and paste it in packages folder. Then in my composer.json I put code below.

composer.json

{
    "name": "laravel/laravel",
    "type": "project",
    "description": "The Laravel Framework.",
    "keywords": [
        "framework",
        "laravel"
    ],
    "license": "MIT",
    "require": {
        "php": "^7.2",
        "fideloper/proxy": "^4.0",
        "guzzlehttp/guzzle": "^6.5",
        "intervention/image": "^2.5",
        "intervention/zodiac": "dev-master",  // HERE I ADDED THIS!!!!!
        "laravel-notification-channels/messagebird": "^2.1",
        "laravel/framework": "^6.2",
        "laravel/socialite": "^4.3",
        "laravel/tinker": "^2.0",
        "laravel/ui": "^1.1",
        "predis/predis": "^1.1"
    },
    "require-dev": {
        "barryvdh/laravel-debugbar": "^3.2",
        "facade/ignition": "^1.4",
        "fzaninotto/faker": "^1.4",
        "jason-guru/laravel-make-repository": "^0.0.2",
        "mockery/mockery": "^1.0",
        "nunomaduro/collision": "^3.0",
        "phpunit/phpunit": "^8.0"
    },
    "config": {
        "optimize-autoloader": true,
        "preferred-install": "dist",
        "sort-packages": true
    },
    "repositories": [
        {
            "type": "path",
            "url": "./packages/zodiac"  // HERE I ADDED THIS "repositories"!!!!!
        }
    ],
    "extra": {
        "laravel": {
            "dont-discover": []
        }
    },
    "autoload": {
        "psr-4": {
            "App\": "app/"
        },
        "classmap": [
            "database/seeds",
            "database/factories"
        ]
    },
    "autoload-dev": {
        "psr-4": {
            "Tests\": "tests/"
        }
    },
    "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"
        ]
    }
}

And after this when I hit composer update and composer dump-autoload, laravel makes new zodiac folder in vendor/intervetion folder and I am back on beggining. Any help is appreciated.

0 likes
3 replies
James_Moore's avatar

Hey @dr24 so I would follow this process, my development environment is a windows / homestead box.

  1. Add the following to composer.json below require-dev with your package
-     "repositories": [
        {
            "type": "path",
            "url": "./packages/james-n-m/chuck-norris-jokes",
            "options": {
                "symlink": true
            }
        }
    ],
  1. Put your package in your laravel_app/packages/intervention/zodiac

my personal project example

packages/james-n-m/chuck-norris-jokes
  1. if your running a homestead vagrant box you must run as administrator, make sure your vm is completely off before re-running shell as admin or it will lock. Go as far as checking virutal box to make sure its powered off.

  2. composer require name of package james-n-m/chuck-norris-jokes this will set up the symlink. Symlink just means youll be able to edit from packages/intervention/the-package

  3. "symlinking from" when dependencies added means its working

  4. your composer.json will have the "dev-master" next to the package name. I think your missing the intervention in "url" for repositories.

1 like
dr24's avatar
Level 2

@james_moore

Okay, I am on windows but I don't have homestead box. Is is then like this or there are diferences?

James_Moore's avatar

@dr24 run your terminal as admin then and i think it should be the same .. let me know how it goes

Please or to participate in this conversation.