drupal/composer/Metapackage/README.txt

67 lines
2.6 KiB
Plaintext
Raw Normal View History

# Drupal Metapackages
A metapackage is a Composer package that contains only a composer.json, and
has no other content. In other words, the purpose of a metapackage is to
provide dependencies, not to provide code or data.
## Metapackages Provided by Drupal Core
Drupal Core provides three metapackages that serve different purposes.
- drupal/core-recommended: This project pins to the exact version of each
dependency used in drupal/core. It also requires drupal/core, so
drupal/core-recommended should be used INSTEAD OF drupal/core. See usage
diagram below. This relationship makes it easier for Composer to update
a Drupal project.
- drupal/dev-dependencies: This project provides the same version constraints
as Drupal uses for testing. It is useful for projects that either wish to
run some of the Drupal tests directly, or for projects that may wish to use
the same components that Drupal does for testing.
- drupal/pinned-dev-dependencies: This project should be used INSTEAD OF
drupal/dev-dependencies in instances where a project wishes to pin to the
exact version of each testing dependency used in Drupal. This in general
should not be necessary.
Note that a project that uses both drupal/core-recommended and
drupal/pinned-dev-dependencies must update them both at the same time, e.g.:
composer update drupal/core-recommended drupal/pinned-dev-dependencies --with-updates
Composer may have trouble with the update if one of these projects is listed
on the command line without the other. Running composer update without any
parameters should also work, because in this instance every dependency is
updated.
## Metapackage Usage in Template Projects
The relationship between the metapackages drupal/core-recommended and
drupal/dev-dependencies and the project (subtree split) drupal/core, as
used in the drupal/recommended-project is shown below:
+----------------------------+
| drupal/recommended-project |
+----------------------------+
|
+--"require":
| |
| | +-------------------------+ +-------------+
| +-->| drupal/core-recommended |-->| drupal/core |
| +-------------------------+ +-------------+
|
+--"require-dev":
|
| +-------------------------+
+-->| drupal/dev-dependencies |
+-------------------------+
If a user does not wish to pin their Drupal project's dependencies to the same
versions used in drupal/core, then they should replace drupal/core-recommended
with drupal/core in their "require" section.
If a user does not need the testing dependencies in their Drupal project, then
they may simply remove drupal/dev-dependencies from the "require-dev" section.