Skip to content

Allows installing Drupal extensions even if not compatible with installed drupal/core package

Notifications You must be signed in to change notification settings

mglaman/composer-drupal-lenient

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

32 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Drupal Lenient Composer Plugin

Lenient with it, Drupal 11 with it.

Why?

The Drupal community introduced a lenient Composer facade that modified the drupal/core constraint for packages. This was done to remove a barrier with getting extensions installed via Composer to work on making modules Drupal 9 ready.

We hit the same problem, again. At DrupalCon Portland we sat down and decided a Composer plugin is the best approach.

See Add a composer plugin that supports 'composer require-lenient' to support major version transitions.

Drupal documentation page: Using Drupal's Lenient Composer Endpoint.

How

This subscribes to PluginEvents::PRE_POOL_CREATE and filters packages. This is inspired by symfony/flex, but it does not filter out packages. It rewrites the drupal/core constraint on any package with a type of drupal-*, excluding drupal-core. The constraint is set to '^8 || ^9 || ^10 || ^11 || ^12' for drupal/core.

Try it

Set up a fresh Drupal 11 site with this plugin (remember to press y for the new allow-plugins prompt.)

composer create-project drupal/recommended-project d11
cd d11
composer require mglaman/composer-drupal-lenient

The plugin only works against specified packages. To allow a package to have a lenient Drupal core version constraint, you must add it to extra.drupal-lenient.allowed-list. The following is an example to add Simplenews via the command line with composer config

composer config --merge --json extra.drupal-lenient.allowed-list '["drupal/simplenews"]'

Now, add a module that does not have a Drupal 11 compatible release!

composer require drupal/simplenews

🥳 Now you can use cweagans/composer-patches to patch the module for Drupal 11 compatibility!

For a quick start, allow installing the module by installing Backward Compatibility:

Backward Compatibility allows you to install old Drupal modules in current Drupal.

Alternatively, manually add the latest version in the module *.info.yml file:

core_version_requirement: ^9.3 || ^10 || ^11

Allowing all packages

If you want to allow all packages to have a lenient Drupal core version constraint, you can set extra.drupal-lenient.allow-all to true.

composer config --json extra.drupal-lenient.allow-all true

Using allow-all allows you to install any package without needing to add it to the allowed-list.

Support when composer.lock removed

This plugin must be installed globally if your project's composer.lock file is removed.

composer global config --no-plugins allow-plugins.mglaman/composer-drupal-lenient true
composer global require mglaman/composer-drupal-lenient

Warning: this means the plugin will run on all Composer commands. This is not recommended, but it is the only way the plugin can work when composer.lock is removed.

About

Allows installing Drupal extensions even if not compatible with installed drupal/core package

Topics

Resources

Stars

Watchers

Forks

Sponsor this project

 

Languages