プロジェクトにパッチを含める必要があります。 composer.jsonにcweagans/composer-patchesを含め、次の行を追加セクションに追加しました(構成インストーラーで配布を有効にしようとした場合の例です)。
"patches": {
"drupal/config_installer": {
"Enable distribution for Configuration installer profile": "patches/config_installer_enable_distribution.patch"
}
}
その後、composer update
を実行します。
- Installing drupal/config_installer (1.5.0): Loading from cache
- Applying patches for drupal/config_installer
patches/config_installer_enable_distribution.patch (Enable distribution for Configuration installer profile)
したがって、エラーは発生せず、パッチは正常に適用されたようです。また、ファイルPATCHES.txt
がパッケージのルートディレクトリに正常に作成されます。それでもパッチは適用されていません。
私はこの方法をGithubから来る他のパッケージで試してみましたが、機能しますが、drupal.orgのモジュールまたはプロファイルでこれを試すたびに、パッチが適用されません。
何か不足していますか?
composer update -vvv
を実行したところ、パッチに対して実行されているコマンドが実際にGitであることがわかりました。
git -C 'web/profiles/contrib/config_installer' apply '-p1' '/path/to/project/patches/config_installer_enable_distribution.patch'
コマンドを単独で実行してみました。繰り返しますが、ファイルは変更されませんでした。
問題は、composerがgit apply
を使用してパッチを適用していることです。これは、ソースからインストールされていないパッケージには機能しません。
したがって、解決策はソースからパッケージをインストールすることです。このようにして、パッケージはパッケージとそのリポジトリ(利用可能な場合)をフェッチして、パッチを適用できるようにします。
そう...
使用する
composer require vendor/package --prefer-source
パッケージがすでにインストールされている場合は、composer install
( composer reinstall
コマンドはありません )で再フェッチできるように、パッケージを削除する必要があります。そうしてから使用してください
composer install vendor/package --prefer-source
composer.json
のconfig
セクションで、プロジェクトのデフォルトの動作として設定することもできます。
"config": {
"preferred-install": "source"
},
更新:
プロジェクト全体をソースからインストールするように設定したくない場合は、特定のパッケージに対してのみ設定できます。そのためには、パッケージのバージョン制約で VCSブランチ を指定する必要があります。
"require": {
"vendor/package": "dev-branch#branch-hash"
}
drupal 8にパッチを適用するには、composer.jsonファイルを編集して余分なセクションを見つけます-
"extra": {
.
.
.
"patches": {
"drupal/MODULE_NAME": {
"ANY_STRING_TO_NAME_THE_APPLYING_PATCH": "PATCH URL"
}
},
"enable-patching": true
}
例えば -
"extra": {
"installer-types": [
"bower-asset",
"npm-asset"
],
"patches": {
"drupal/recaptcha": {
"Drupal recaptcha ajax fix syncing": "https://www.drupal.org/files/issues/2019-04-17/recaptcha-ajax-2493183-172.patch"
}
},
"enable-patching": true
}
次に、composer installを実行すると、パッチが適用されます。
同じパッケージに複数のパッチを適用する場合は、パッケージ名の中に新しいキーを追加します
例:-
"patches": {
"drupal/MODULE_NAME": {
"Patch name 1": "Patch 1 Url",
"Patch name 2": "Patch 2 Url"
}
},