Weave Code
Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Migrate Specific Laravel Package

caloskao/migrate-specific

View on GitHub
Deep Wiki
Context7

Getting Started

What changed in v2.0.1: the illuminate/* / laravel/framework constraint was widened from a narrow 5.x range to 5.7 or higher, including major versions (effectively ^5.7|^6|^7|... or a >=5.7 style range). Nothing in the package API changed — this is a compatibility release. Practically, that means:

  • You can now composer require the package on Laravel 6, 7, 8, 9, 10, 11, 12 without --with-all-dependencies gymnastics or a forked constraint.
  • The package will also install on future majors it has never been tested against. Treat that as convenience, not a guarantee.

Minimal steps on a fresh app (5.7 through current):

composer require <vendor>/<package>      # no version pin needed anymore
php artisan vendor:publish --provider="<Vendor>\<Package>\<Package>ServiceProvider"
php artisan config:clear                 # if you had a cached config before publishing
  1. Check composer show <vendor>/<package> and confirm the resolved version is 2.0.1 — on older Laravel installs it's easy to silently stay on a 1.x line that satisfies an older constraint.
  2. Look first at the package's README / config/<package>.php after publishing. That config file is the real API surface; most behaviour is toggled there rather than in code.
  3. Registration: since 5.7, package auto-discovery handles the service provider and any aliases listed under extra.laravel in the package's composer.json. Only add the provider manually (in config/app.php) if you've disabled discovery or the package predates discovery metadata.
  4. First use case: wire it into a single controller or console command first, driven entirely by the published config, before spreading it across the app. That isolates any behaviour differences between the Laravel version you're on and the one the package was originally written for.

Implementation Patterns

Resolve from the container, don't new it up. The provider binds the package's manager/service as a singleton in most of these packages. Constructor-inject it or use app(...) / the facade so config overrides apply:

public function __construct(private \Vendor\Package\Manager $manager) {}

Config-first integration. Keep package options in config/<package>.php and read them via config('<package>.<key>'), not hard-coded arguments. This is what makes multi-environment setups (queue workers, Horizon, Octane) behave consistently, and it's the only clean extension point most packages like this expose.

Per-environment drivers. If the package exposes a driver/connection concept, bind per environment (sync/local vs. real service in production) via .env → config. This is the standard Laravel pattern and lets you run the full test suite without hitting an external dependency.

Wrap it in your own thin service. Rather than calling the package from twenty controllers, put one application-level class in front of it (app/Services/...) that owns the config lookup and error handling. When the package eventually needs to be swapped or pinned, you change one file.

In jobs and queued listeners, re-resolve the package inside handle() rather than storing it on the job instance — the singleton may not survive serialization the way you expect on Laravel 8+ with typed properties.

Testing pattern:

$this->app['config']->set('<package>.driver', 'fake');

or bind a mock of the package's interface in setUp() so tests never depend on the real backend. If the package ships a fake/testing driver, prefer that — it's usually kept in sync with the real one.

Blade / front-end integration: if the package registers directives or assets, publish them (--tag=views, --tag=assets) so you can override without forking, and keep the overrides in resources/views/vendor/<package>.

Gotchas and Tips

The widened constraint cuts both ways. >=5.7 with no upper bound means Composer will happily install this on a Laravel major the maintainers have never run CI against. Before every Laravel upgrade, run the package's own tests or smoke-test your integration; don't assume "it installed" == "it works". Consider pinning the package in your composer.json ("<vendor>/<package>": "^2.0") so a future 3.x doesn't slide in during an unrelated composer update.

Check the transitive constraints, not just the package's. If the package depends on illuminate/support with a >=5.7 style range but a sibling dependency still pins ^5.x, you'll get an unresolvable set on Laravel 9+. Use composer why-not laravel/framework ^10.0 to find the actual blocker rather than fighting the constraint on this package.

Auto-discovery and config caching. After bumping the package, php artisan config:cache in a deploy can bake in stale package config if the file was published under an old key set. config:clear + config:cache in the deploy script; do the same for route:cache if the package registers routes.

Service provider ordering. On 5.7–5.8 defer/order behaviour differs from 8+; if the package registers config merges, your published config wins — but only if the publish happened before the merge is cached. Symptom is "my config value is ignored" — clear caches before debugging the package itself.

Debugging checklist, in order: (1) php artisan config:clear, (2) composer show <vendor>/<package> to confirm the version actually resolved, (3) php artisan tinker → app(<PackageManager>::class) to confirm the binding exists, (4) check bootstrap/cache/packages.php includes the provider. Nine times out of ten it's (1) or (2).

Extension points worth knowing: config file, published views/assets, any *ServiceProvider::class binding you can rebind in your own AppServiceProvider::register() via $this->app->bind(...), and (if present) the package's event hooks. Prefer rebinding over subclassing — it survives package upgrades.

Deprecations aren't documented in this release. v2.0.1 is constraint-only, so there's no deprecation surface to migrate against; but confirm by diffing the package's CHANGELOG between the 1.x version you may have been on and 2.0.x — the 2.0 major likely carried breaks this patch note doesn't mention. If you're jumping from 1.x straight to 2.0.1, treat it as a major upgrade and test accordingly.

Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
coleus/frame
thtg88/journalism
filagora/filagora-ai-forums
rlacerda83/query-parser
socialdept/atp-orm
cboxdk/laravel-assistant-client
socialdept/atp-resolver
socialdept/tenant-domains
tautvydasr/blade-class-names
socialdept/color-scales
maherelgamil/controller
coleus/widgets
coleus/table
coleus/users
coleus/music
coleus/health
coleus/calendar
coleus/notes
coleus/support
coleus/settings