Files
drupal11-ddev/vendor/drupal/core-recipe-unpack/README.md

257 lines
7.2 KiB
Markdown
Raw Normal View History

2025-10-08 11:39:17 -04:00
# Drupal Recipe Unpack Plugin
Thanks for using this Drupal component.
You can participate in its development on Drupal.org, through our issue system:
https://www.drupal.org/project/issues/drupal
You can get the full Drupal repo here:
https://www.drupal.org/project/drupal/git-instructions
You can browse the full Drupal repo here:
https://git.drupalcode.org/project/drupal
## Overview
The Recipe Unpacking system is a Composer plugin that manages "drupal-recipe"
packages. Recipes are special Composer packages designed to bootstrap Drupal
projects with necessary dependencies. When a recipe is installed, this plugin
"unpacks" it by moving the recipe's dependencies directly into your project's
root `composer.json`, and removes the recipe as a project dependency.
## Key Concepts
### What is a Recipe?
A recipe is a Composer package with type `drupal-recipe` that contains a curated
set of dependencies, configuration and content but no code of its own. Recipes
are meant to be "unpacked" and "applied" rather than remain as runtime
dependencies.
### What is Unpacking?
Unpacking is the process where:
1. A recipe's dependencies are added to your project's root `composer.json`
2. The recipe itself is removed from your dependencies
3. The `composer.lock` and vendor installation files are updated accordingly
4. The recipe will remain in the project's recipes folder so it can be applied
## Commands
### `drupal:recipe-unpack`
Unpack a recipe package that's already required in your project.
```bash
composer drupal:recipe-unpack drupal/example_recipe
```
Unpack all recipes that are required in your project.
```bash
composer drupal:recipe-unpack
```
#### Options
This command doesn't take additional options.
## Automatic Unpacking
### After `composer require`
By default, recipes are automatically unpacked after running `composer require`
for a recipe package:
```bash
composer require drupal/example_recipe
```
This will:
1. Download the recipe and its dependencies
2. Add the recipe's dependencies to your project's root `composer.json`
3. Remove the recipe itself from your dependencies
4. Update your `composer.lock` file
### After `composer create-project`
Recipes are always automatically unpacked when creating a new project from a
template that requires this plugin:
```bash
composer create-project drupal/recommended-project my-project
```
Any recipes included in the project template will be unpacked during
installation, as long as the plugin is enabled.
## Configuration
Configuration options are set in the `extra` section of your `composer.json`
file:
```json
{
"extra": {
"drupal-recipe-unpack": {
"ignore": ["drupal/recipe_to_ignore"],
"on-require": true
}
}
}
```
### Available Options
| Option | Type | Default | Description |
|--------|------|---------|-------------|
| `ignore` | array | `[]` | List of recipe packages to exclude from unpacking |
| `on-require` | boolean | `true` | Automatically unpack recipes when required by `composer require` |
## How Recipe Unpacking Works
1. The system identifies packages of type `drupal-recipe` during installation
2. For each recipe not in the ignore list, it:
- Extracts its dependencies
- Adds them to the root `composer.json`
- Recursively processes any dependencies that are also recipes
- Removes the recipe and any dependencies that are also recipes from the root
`composer.json`
3. Updates all necessary Composer files:
- `composer.json`
- `composer.lock`
- `vendor/composer/installed.json`
- `vendor/composer/installed.php`
## Cases Where Recipes Will Not Be Unpacked
Recipes will **not** be unpacked in the following scenarios:
1. **Explicit Ignore List**: If the recipe is listed in the `ignore` array in
your `extra.drupal-recipe-unpack` configuration
```json
{
"extra": {
"drupal-recipe-unpack": {
"ignore": ["drupal/recipe_name"]
}
}
}
```
2. **Disabled Automatic Unpacking**: If `on-require` is set to `false` in your
`extra.drupal-recipe-unpack` configuration
```json
{
"extra": {
"drupal-recipe-unpack": {
"on-require": false
}
}
}
```
3. **Development Dependencies**: Recipes in the `require-dev` section are not
automatically unpacked
```json
{
"require-dev": {
"drupal/dev_recipe": "^1.0"
}
}
```
You will need to manually unpack these using the `drupal:recipe-unpack`
command if desired.
4. **With `--no-install` Option**: When using `composer require` with the
`--no-install` flag
```bash
composer require drupal/example_recipe --no-install
```
In this case, you'll need to run `composer install` afterward and then
manually unpack using the `drupal:recipe-unpack` command.
## Example Usage Scenarios
### Basic Recipe Installation
```bash
# This will automatically install and unpack the recipe
composer require drupal/example_recipe
```
The result:
- Dependencies from `drupal/example_recipe` are added to your root
`composer.json`
- `drupal/example_recipe` itself is removed from your dependencies
- You'll see a message: "drupal/example_recipe unpacked successfully."
- The recipe files will be present in the drupal-recipe installer path
### Manual Recipe Unpacking
```bash
# First require the recipe without unpacking
composer require drupal/example_recipe --no-install
composer install
# Then manually unpack it
composer drupal:recipe-unpack drupal/example_recipe
```
### Working with Dev Recipes
```bash
# This won't automatically unpack (dev dependencies aren't auto-unpacked)
composer require --dev drupal/dev_recipe
# You'll need to manually unpack if desired (with confirmation prompt)
composer drupal:recipe-unpack drupal/dev_recipe
```
### Creating a New Project with Recipes
```bash
composer create-project drupal/recipe-based-project my-project
```
Any recipes included in the project template will be automatically unpacked
during installation.
## Best Practices
1. **Review Recipe Contents**: Before requiring a recipe, review its
dependencies to understand what will be added to your project.
2. **Consider Versioning**: When a recipe is unpacked, its version constraints
for dependencies are merged with your existing constraints, which may result
in complex version requirements.
3. **Dev Dependencies**: Be cautious when unpacking development recipes, as
their dependencies will be moved to the main `require` section, not
`require-dev`.
4. **Custom Recipes**: When creating custom recipes, ensure they have the
correct package type `drupal-recipe` and include appropriate dependencies.
## Troubleshooting
### Recipe Not Unpacking
- Check if the package type is `drupal-recipe`
- Verify it's not in your ignore list
- Confirm it's not in `require-dev` (which requires manual unpacking)
- Ensure you haven't used the `--no-install` flag without following up with
installation and manual unpacking
### Unpacking Errors
If you encounter issues during unpacking:
1. Check Composer's error output for specific issues and run commands with the
`--verbose` flag
2. Verify that version constraints between your existing dependencies and the
recipe's dependencies are compatible
3. For manual troubleshooting, consider temporarily setting `on-require` to
`false` and unpacking recipes one by one