diff --git a/doc/04-schema.md b/doc/04-schema.md index f1859ea95..05149d331 100644 --- a/doc/04-schema.md +++ b/doc/04-schema.md @@ -401,19 +401,19 @@ Example: #### require -Lists packages required by this package. The package will not be installed +Map of packages required by this package. The package will not be installed unless those requirements can be met. #### require-dev ([root-only](04-schema.md#root-package)) -Lists packages required for developing this package, or running +Map of packages required for developing this package, or running tests, etc. The dev requirements of the root package are installed by default. Both `install` or `update` support the `--no-dev` option that prevents dev dependencies from being installed. #### conflict -Lists packages that conflict with this version of this package. They +Map of packages that conflict with this version of this package. They will not be allowed to be installed together with your package. Note that when specifying ranges like `<1.0 >=1.1` in a `conflict` link, @@ -423,7 +423,7 @@ probably want to go for `<1.0 || >=1.1` in this case. #### replace -Lists packages that are replaced by this package. This allows you to fork a +Map of packages that are replaced by this package. This allows you to fork a package, publish it under a different name with its own version numbers, while packages requiring the original package continue to work with your fork because it replaces the original package. @@ -441,10 +441,12 @@ that exact version, and not any other version, which would be incorrect. #### provide -List of other packages that are provided by this package. This is mostly +Map of packages that are provided by this package. This is mostly useful for implementations of common interfaces. A package could depend on -some virtual `logger-implementation` package, any library that implements -this logger interface would list it in `provide`. +some virtual package e.g. `psr/logger-implementation`, any library that implements +this logger interface would list it in `provide`. Implementors can then +be [found on Packagist.org](https://packagist.org/providers/psr/log-implementation). + Using `provide` with the name of an actual package rather than a virtual one implies that the code of that package is also shipped, in which case `replace` is generally a better choice. A common convention for packages providing an