How to install patched modules in fresh Drupal 10 Installation? - drupal

I have a fresh Drupal 10 Installation und would like to install some modules with more ore less simple patches. I tried it in different ways and get allways the same errors with composer require.
This are my steps:
manual changed files for exampe in superfish for this patch:
https://www.drupal.org/files/issues/2022-08-01/superfish-%233.patch and manually put the module in module/contrib folder. Than I tried composer require drupal/superfish:~1.4 with different versions and with and without parameter -W.
I wrote patch in composer.json and tried composer install. There comes the message nothing to install or update. I used also composer update --lock
I downloaded last dev-Version and patch and tried with git apply.
The result with composer require is more ore less the same error like this:
Problem 1 - drupal/block_content_permissions[1.0.0, ..., 1.8.0]
require drupal/core ^8 -> found drupal/core[8.0.0, ..., 8.9.20] but
these were not loaded, likely because it conflicts with another
require. - drupal/block_content_permissions[1.9.0, ..., 1.10.0]
require drupal/core ^8 || ^9 -> found drupal/core[8.0.0, ..., 8.9.20,
9.0.0, ..., 9.5.0] but these were not loaded, likely because it conflicts with another require. - Root composer.json requires
drupal/block_content_permissions * -> satisfiable by
drupal/block_content_permissions[1.0.0, ..., 1.10.0].
You can also try re-running composer require with an explicit version
constraint, e.g. "composer require drupal/block_content_permissions:*"
to figure out if any version is installable, or "composer require
drupal/block_content_permissions:^2.1" if you know which you need.
If I enable the patched modules manualy in backend, they work normaly. But they are not under composer controll.
How to do in the right way?

Drupal.org has a documented process for allowing a lenient composer install.
For Drupal 10:
Try the Lenient Composer Plugin
The lenient composer plugin lets you specify an allowlist of packages
where you are willing to break the version constraint, using a command
like:
composer config --merge --json extra.drupal-lenient.allowed-list '["drupal/token"]'
Together with the Composer Patches Plugin, this allows you to install
any Drupal extension, even if the version constraint hasn't been
officially updated yet. Of course the code may still need to be
patched for deprecations.

Related

"Root composer.json requires ocramius/package-versions..." but there is no such requirement in my composer.json

In a Symfony 4 project, I'm getting problems after a composer selfupdate to 2.1 (from 1.x). One of the error messages when hitting
composer update nothing
is:
Root composer.json requires ocramius/package-versions == 1.3.0.0 -> satisfiable by ocramius/package-versions[1.3.0].
What is really strange in my opinion is that my composer.json does not contain any references to "ocramius/package-versions" and somehow I don't manage to trace where it comes from. Even stranger: When I try
composer show ocramius/package-versions --tree
I get
[InvalidArgumentException]
Package ocramius/package-versions not found
The only references to "ocramius/package-versions" in my project come from
composer.lock
vendor/composer/package-versions-deprecated/composer.json
vendor/composer/installed.json
It seems it is stuck in the composer.lock, but I dont want to run a real composer update on the whole project because of side effects. Any ideas what I could do?
EDIT:
After getting poked into the direction of composer why I managed to find out why ocramius/package-versions is included at all, but still 1.3.0:
$ composer why ocramius/package-versions
composer/package-versions-deprecated 1.11.99.2 replaces ocramius/package-versions (1.11.99)
ocramius/package-versions 2.3.0 replaces composer/package-versions-deprecated (*)
$ composer why composer/package-versions-deprecated
composer/package-versions-deprecated 1.11.99.2 replaces ocramius/package-versions (1.11.99)
doctrine/migrations 3.2.0 requires composer/package-versions-deprecated (^1.8)
doctrine/orm 2.7.5 requires composer/package-versions-deprecated (^1.8)
symfony/proxy-manager-bridge v4.4.25 requires composer/package-versions-deprecated (^1.8)
Ok, so I finally found why the packages is included. But why the wrong version?
Then the scales fell from my eyes: Why not just update it instead of trying to find out why this version is chosen...???
A simple
composer update ocramius/package-versions
did the trick. D'oh!
As you can see on the packagist page of that package, v1.3.0 is not compatible with Composer v2, as it requires composer-plugin-api: ^1.0.0. You need to update that package if you want to use Composer v2.
If you want to check which package requires this one, you can use composer why

Unable to install gos/react-amqp

Context
I am new to websockets, and trying to implement a notifications pusher on Symfony with the help of the WebsocketBundle, following this tutorial.
The bundle is implementing 3 different pushers :
I tried using the zmq pusher and it just does not seem to fit with Windows (I am getting the exact same symptoms as in the linked post)
I then tried WebSocketPusher and when I run the WSServer the port I configured in config.yml is not even opening. Same symptom as this open issue
So, finally, I tried to use AMQP pusher and this time I cannot even install it, but as my google searches do not end up in github open issues, I think that I'm probably the one missing something here, and thus I'm posting here.
Problem
I installed the php extension and it does seem to work as it appears in my php extensions and does not give any errors.
When I run the following command from the tutorial : composer require gos/react-amqp I am getting the following response :
$ composer require gos/react-amqp
Using version ^0.1.2 for gos/react-amqp
./composer.json has been updated
Loading composer repositories with package information
Updating dependencies (including require-dev)
Your requirements could not be resolved to an installable set of packages.
Problem 1
- Can only install one of: evenement/evenement[v2.0.0, v2.1.0].
- Can only install one of: evenement/evenement[v2.1.0, v2.0.0].
- Can only install one of: evenement/evenement[v2.0.0, v2.1.0].
- gos/react-amqp v0.1.2 requires evenement/evenement ~2.0.0 -> satisfiable by evenement/evenement[v2.0.0].
- Installation request for gos/react-amqp ^0.1.2 -> satisfiable by gos/react-amqp[v0.1.2].
- Installation request for evenement/evenement (locked at v2.1.0) -> satisfiable by evenement/evenement[v2.1.0].
Installation failed, reverting ./composer.json to its original content.
I don't fully understand the composer error message, but it seems that he is trying to install evenement/evenement ~2.0.0 and for some reason, it fails.
So I tried to add it manually in the composer.json, and composer install ran fine, and evenement/evenement: ~2.0.0 ended up in my composer.lock file.
But the composer require gos/react-amqp command still gave me the same error message.
Same results after a composer update attempt.
Could anyone explain me what is going on ?
I am running PHP 5.5 on a WAMP Server
Alright, so I finally got it working.
For some reason composer would keep using the 2.1.0 version when it was never required.
For those running into the same kind of composer error, here is what I did :
rm composer.lock
explicitely ask for the exact minimum required version, in my case : composer require evenement/evenement:2.0 You should see something like Updating evenement/evenement (v2.1.0 => v2.0.0) Downloading: 100% in the console
composer install

How to instal modules with Drupal 8 and Composer?

I installed Drupal 8 via composer with:
composer create-project drupal-composer/drupal-project:8.x-dev my_site --stability dev --no-interaction
This downloaded all the files and run composer install. According to this tutorial - https://www.drupal.org/node/2718229 - doing so this way will also configure composer.json to allow installation of modules, themes etc too via composer. Nice
However, I'm trying to install a new module:
$ composer require drupal/codesnippet
Using version ^1.6 for drupal/codesnippet
./composer.json has been updated
> DrupalProject\composer\ScriptHandler::checkComposerVersion
Loading composer repositories with package information
Updating dependencies (including require-dev)
- Installing drupal/codesnippet (1.6.0)
Downloading: 100%
Writing lock file
Generating autoload files
> DrupalProject\composer\ScriptHandler::createRequiredFiles
However, when I go to Admin Bar > Extend > Install new module, I can search for the module and it says it's not installed yet. If I try to enable/install it from there it tells me I need to download and copy to the /libraries directory:
Before you can use the CKEditor CodeSnippet module, you need to download the codesnippet plugin from ckeditor.com and place it in /libraries/codesnippet. Check the README.txt for more information. Get the plugin here. (Currently using CodeSnippet version Plugin not detected)
Are these two completely different methods? How can I complete the installation with composer of this module?
Composer is a dependency manager, and whether or not third-party dependencies are included depends on how the module author managed their dependencies in the first place.
You aren't going to be able to complete the install via Composer alone, if a specific dependency isn't present on the repository that Composer downloads its packages from.
You're going to have to download the CKEditor CodeSnippet module from ckeditor.com. Composer can't manage that dependency for you, because that CKEditor plugin isn't a Composer package.
You can download it here: http://ckeditor.com/addon/codesnippet
Martyn, I guess you are confusing two different things into the same one: the drupal module and the external library required by the module.
The Drupal module codesnippet (https://www.drupal.org/project/codesnippet) is just a drupal integration module for the CKeditor addon with the same name, which you can download it (http://download.ckeditor.com/codesnippet/releases/codesnippet_4.6.2.zip) and place it in the drupal webroot /libraries folder manually (in your case my_site/web/libraries/ to be more specific - you have to create it if does not exist already).
Then you should be able to enable the drupal module.
PS: You could also add the library requirement in the composer.json library manually, which might be just a bit more complicated for beginners, because you also have to manually specify other things like a repository type, url and installer-paths for the extra external library that you need , but might be easier in the long run to deploy new Drupal8 installations with the same requirements just with a proper main composer.json file, without the need to go and manually download external libraries. There is a similar comment of mine(user zet) that you could read on this drupal dropzonejs module issue https://www.drupal.org/node/2853274

How to solve Check Component Dependency Error in magento 2.1.1

Here I show my problem in image file
Can any one help me how to solve this problem?
Show This Error:
Check Component Dependency
We found conflicting component dependencies. Hide detail
Command "update" failed: Loading composer repositories with package information
Updating dependencies (including require-dev)
Your requirements could not be resolved to an installable set of packages.
Problem 1
- Installation request for magento/product-community-edition 2.1.1 -> satisfiable by magento/product-community-edition[2.1.1].
- magevision/module-free-shipping-admin 2.1.0 requires magento/framework 100.0.* -> satisfiable by magento/framework[100.0.2, 100.0.3, 100.0.4, 100.0.5, 100.0.6, 100.0.7, 100.0.8, 100.0.9, 100.0.10, 100.0.11].
- Can only install one of: magento/framework[100.1.1, 100.0.2].
- Can only install one of: magento/framework[100.1.1, 100.0.3].
- Can only install one of: magento/framework[100.1.1, 100.0.4].
- Can only install one of: magento/framework[100.1.1, 100.0.5].
- Can only install one of: magento/framework[100.1.1, 100.0.6].
- Can only install one of: magento/framework[100.1.1, 100.0.7].
- Can only install one of: magento/framework[100.1.1, 100.0.8].
- Can only install one of: magento/framework[100.1.1, 100.0.9].
- Can only install one of: magento/framework[100.1.1, 100.0.10].
- Can only install one of: magento/framework[100.1.1, 100.0.11].
- magento/product-community-edition 2.1.1 requires magento/framework 100.1.1 -> satisfiable by magento/framework[100.1.1].
- Installation request for magevision/module-free-shipping-admin 2.1.0 -> satisfiable by magevision/module-free-shipping-admin[2.1.0].
For additional assistance, see component dependency help .
Solved this issue.
You need to update php memory limits in .htaccess and .user.ini files in Magento root directory from 765MB to 2G as they override system php limits.
Your problem is that the extension you're installing expects Magento 2.0.x but you're using 2.1.x.
This leads me to believe that either the extension authors either:
Aren't ready to support Magento 2.1
or
They have erroneously constrained their packages requirements by accident, not understanding Composer's versioning scheme.
Referencing the extension you're installing on Github we can see it specifies some requirements:
"require": {
"php": "~5.5.0|~5.6.0|~7.0.0",
"magento/module-config": "100.0.*",
"magento/module-store": "100.0.*",
"magento/module-shipping": "100.0.*",
"magento/module-backend": "100.0.*",
"magento/module-quote": "100.0.*",
"magento/framework": "100.0.*"
}
Let's take a look at one of the modules required by the extension: magento/module-config with a version constraint of 100.0.*.
I can see that Magento 2.0.10 would supply a compatible version 100.0.5.
Whereas you have Magento 2.1.1 installed, which requires version 100.1.1.
100.1.1 does not satisfy the 100.0.* requirement.
There are roughly two solutions to your problem
Use Magento 2.0 (not ideal but could unblock you to play around with the extension)
Get in touch with the extension developer and see if they intend to support Magento 2.1 (either by updating their code to be compatible or fixing their package to allow installation under 2.1)
You may see require-dev tag in composer.json file.
Run composer install or update with --no-dev flag. This will not install developer dependency packages.
composer install --no-dev
OR
composer update --no-dev

How to update a single library with Composer?

I need to install only 1 package for my SF2 distribution (DoctrineFixtures).
When I run
php composer.phar update
I get
- Updating twig/twig (dev-master 39d94fa => v1.13.0)
The package has modified files:
M CHANGELOG
M doc/filters/batch.test
M doc/filters/index.rst
M doc/filters/url_encode.rst
M doc/functions/index.rst
M doc/tags/index.rst
M doc/tests/index.rst
M lib/Twig/Autoloader.php
M lib/Twig/Compiler.php
M lib/Twig/CompilerInterface.php
-10 more files modified, choose "v" to view the full list
It appears the last developer edited a lot of files inside vendor.
In order to get around this, I tried
php composer.phar update <package_name>
But that doesn't seem to work. How can I update/install only one library from composer.json?
To install doctrine/doctrine-fixtures-bundle with version 2.1.* and minimum stability #dev use this:
composer require doctrine/doctrine-fixtures-bundle:2.1.*#dev
then to update only this single package:
composer update doctrine/doctrine-fixtures-bundle
If you just want to update a few packages and not all, you can list them as such:
php composer.phar update vendor/package:2.* vendor/package2:dev-master
You can also use wildcards to update a bunch of packages at once:
php composer.phar update vendor/*
As commented by #ZeroThe2nd ZSH users may need to wrap their vendor/* in quotation marks:
php composer.phar update "vendor/*"
--prefer-source: Install packages from source when available.
--prefer-dist: Install packages from dist when available.
--ignore-platform-reqs: ignore php, hhvm, lib-* and ext-* requirements and force the installation even if the local machine does not fulfill these. See also the platform config option.
--dry-run: Simulate the command without actually doing anything.
--dev: Install packages listed in require-dev (this is the default behavior).
--no-dev: Skip installing packages listed in require-dev. The autoloader generation skips the autoload-dev rules.
--no-autoloader: Skips autoloader generation.
--no-scripts: Skips execution of scripts defined in composer.json.
--no-plugins: Disables plugins.
--no-progress: Removes the progress display that can mess with some terminals or scripts which don't handle backspace characters.
--optimize-autoloader (-o): Convert PSR-0/4 autoloading to classmap to get a faster autoloader. This is recommended especially for production, but can take a bit of time to run so it is currently not done by default.
--lock: Only updates the lock file hash to suppress warning about the lock file being out of date.
--with-dependencies: Add also all dependencies of whitelisted packages to the whitelist.
--prefer-stable: Prefer stable versions of dependencies.
--prefer-lowest: Prefer lowest versions of dependencies. Useful for testing minimal versions of requirements, generally used with --prefer-stable.
Difference between install, update and require
Assume the following scenario:
composer.json
"parsecsv/php-parsecsv": "0.*"
composer.lock file
"name": "parsecsv/php-parsecsv",
"version": "0.1.4",
Latest release is 1.1.0. The latest 0.* release is 0.3.2
install: composer install parsecsv/php-parsecsv
This will install version 0.1.4 as specified in the lock file
update: composer update parsecsv/php-parsecsv
This will update the package to 0.3.2. The highest version with respect to your composer.json. The entry in composer.lock will be updated.
require: composer require parsecsv/php-parsecsv
This will update or install the newest version 1.1.0. Your composer.lock file and composer.json file will be updated as well.
You can use the following command to update any module with its dependencies
composer update vendor-name/module-name --with-dependencies
You can basically do following one to install new package as well.
php composer.phar require
then terminal will ask you to enter the name of the package for searching.
$ Search for a package []: //Your package name here
Then terminal will ask the version of the package (If you would like to have the latest version just leave it blank)
$ Enter the version constraint to require (or leave blank to use the latest version) []: //your version number here
Then you just press the return key. Terminal will ask for another package, if you dont want to install another one just press the return key and you will be done.
Just use
composer require {package/packagename}
like
composer require phpmailer/phpmailer
if the package is not in the vendor folder.. composer installs it and if the package exists, composer update package to the latest version.
Update:
require install or update the latest package version. if you want update one package just use update.
To ensure that composer update one package already installed to the last version within the version constraints you've set in composer.json remove the package from vendor and then execute :
php composer.phar update vendor/package
Because you wanted to install specific package
"I need to install only 1 package for my SF2 distribution (DoctrineFixtures)."
php composer.phar require package/package-name:package-version
would be enough

Resources