|
@@ -1,16 +1,17 @@
|
|
# Libraries
|
|
# Libraries
|
|
|
|
|
|
-This chapter will tell you how to make your library installable through Composer.
|
|
|
|
|
|
+This chapter will tell you how to make your library installable through
|
|
|
|
+Composer.
|
|
|
|
|
|
## Every project is a package
|
|
## Every project is a package
|
|
|
|
|
|
As soon as you have a `composer.json` in a directory, that directory is a
|
|
As soon as you have a `composer.json` in a directory, that directory is a
|
|
-package. When you add a `require` to a project, you are making a package that
|
|
|
|
-depends on other packages. The only difference between your project and
|
|
|
|
-libraries is that your project is a package without a name.
|
|
|
|
|
|
+package. When you add a [`require`](04-schema.md#require) to a project, you are
|
|
|
|
+making a package that depends on other packages. The only difference between
|
|
|
|
+your project and libraries is that your project is a package without a name.
|
|
|
|
|
|
In order to make that package installable you need to give it a name. You do
|
|
In order to make that package installable you need to give it a name. You do
|
|
-this by adding a `name` to `composer.json`:
|
|
|
|
|
|
+this by adding the [`name`](04-schema.md#name) property in `composer.json`:
|
|
|
|
|
|
```json
|
|
```json
|
|
{
|
|
{
|
|
@@ -21,12 +22,12 @@ this by adding a `name` to `composer.json`:
|
|
}
|
|
}
|
|
```
|
|
```
|
|
|
|
|
|
-In this case the project name is `acme/hello-world`, where `acme` is the
|
|
|
|
-vendor name. Supplying a vendor name is mandatory.
|
|
|
|
|
|
+In this case the project name is `acme/hello-world`, where `acme` is the vendor
|
|
|
|
+name. Supplying a vendor name is mandatory.
|
|
|
|
|
|
> **Note:** If you don't know what to use as a vendor name, your GitHub
|
|
> **Note:** If you don't know what to use as a vendor name, your GitHub
|
|
-username is usually a good bet. While package names are case insensitive, the
|
|
|
|
-convention is all lowercase and dashes for word separation.
|
|
|
|
|
|
+> username is usually a good bet. While package names are case insensitive, the
|
|
|
|
+> convention is all lowercase and dashes for word separation.
|
|
|
|
|
|
## Platform packages
|
|
## Platform packages
|
|
|
|
|
|
@@ -50,15 +51,14 @@ includes PHP itself, PHP extensions and some system libraries.
|
|
PHP. The following are available: `curl`, `iconv`, `icu`, `libxml`,
|
|
PHP. The following are available: `curl`, `iconv`, `icu`, `libxml`,
|
|
`openssl`, `pcre`, `uuid`, `xsl`.
|
|
`openssl`, `pcre`, `uuid`, `xsl`.
|
|
|
|
|
|
-You can use `composer show --platform` to get a list of your locally available
|
|
|
|
-platform packages.
|
|
|
|
|
|
+You can use [`show --platform`](03-cli.md#show) to get a list of your locally
|
|
|
|
+available platform packages.
|
|
|
|
|
|
## Specifying the version
|
|
## Specifying the version
|
|
|
|
|
|
-You need to specify the package's version some way. When you publish your
|
|
|
|
-package on Packagist, it is able to infer the version from the VCS (git, svn,
|
|
|
|
-hg) information, so in that case you do not have to specify it, and it is
|
|
|
|
-recommended not to. See [tags](#tags) and [branches](#branches) to see how
|
|
|
|
|
|
+When you publish your package on Packagist, it is able to infer the version
|
|
|
|
+from the VCS (git, svn, hg) information. This means you don't have to
|
|
|
|
+explicitly declare it. Read [tags](#tags) and [branches](#branches) to see how
|
|
version numbers are extracted from these.
|
|
version numbers are extracted from these.
|
|
|
|
|
|
If you are creating packages by hand and really have to specify it explicitly,
|
|
If you are creating packages by hand and really have to specify it explicitly,
|
|
@@ -76,9 +76,9 @@ you can just add a `version` field:
|
|
### Tags
|
|
### Tags
|
|
|
|
|
|
For every tag that looks like a version, a package version of that tag will be
|
|
For every tag that looks like a version, a package version of that tag will be
|
|
-created. It should match 'X.Y.Z' or 'vX.Y.Z', with an optional suffix
|
|
|
|
-of `-patch` (`-p`), `-alpha` (`-a`), `-beta` (`-b`) or `-RC`. The suffixes
|
|
|
|
-can also be followed by a number.
|
|
|
|
|
|
+created. It should match 'X.Y.Z' or 'vX.Y.Z', with an optional suffix of
|
|
|
|
+`-patch` (`-p`), `-alpha` (`-a`), `-beta` (`-b`) or `-RC`. The suffix can also
|
|
|
|
+be followed by a number.
|
|
|
|
|
|
Here are a few examples of valid tag names:
|
|
Here are a few examples of valid tag names:
|
|
|
|
|
|
@@ -89,19 +89,20 @@ Here are a few examples of valid tag names:
|
|
- v2.0.0-alpha
|
|
- v2.0.0-alpha
|
|
- v2.0.4-p1
|
|
- v2.0.4-p1
|
|
|
|
|
|
-> **Note:** Even if your tag is prefixed with `v`, a [version constraint](01-basic-usage.md#package-versions)
|
|
|
|
-> in a `require` statement has to be specified without prefix
|
|
|
|
-> (e.g. tag `v1.0.0` will result in version `1.0.0`).
|
|
|
|
|
|
+> **Note:** Even if your tag is prefixed with `v`, a
|
|
|
|
+> [version constraint](01-basic-usage.md#package-versions) in a `require`
|
|
|
|
+> statement has to be specified without prefix (e.g. tag `v1.0.0` will result
|
|
|
|
+> in version `1.0.0`).
|
|
|
|
|
|
### Branches
|
|
### Branches
|
|
|
|
|
|
For every branch, a package development version will be created. If the branch
|
|
For every branch, a package development version will be created. If the branch
|
|
name looks like a version, the version will be `{branchname}-dev`. For example,
|
|
name looks like a version, the version will be `{branchname}-dev`. For example,
|
|
-the branch `2.0` will get the `2.0.x-dev` version (the `.x` is added for technical
|
|
|
|
-reasons, to make sure it is recognized as a branch). The `2.0.x` branch would also
|
|
|
|
-be valid and be turned into `2.0.x-dev` as well. If the branch does not look
|
|
|
|
-like a version, it will be `dev-{branchname}`. `master` results in a
|
|
|
|
-`dev-master` version.
|
|
|
|
|
|
+the branch `2.0` will get the `2.0.x-dev` version (the `.x` is added for
|
|
|
|
+technical reasons, to make sure it is recognized as a branch). The `2.0.x`
|
|
|
|
+branch would also be valid and be turned into `2.0.x-dev` as well. If the
|
|
|
|
+branch does not look like a version, it will be `dev-{branchname}`. `master`
|
|
|
|
+results in a `dev-master` version.
|
|
|
|
|
|
Here are some examples of version branch names:
|
|
Here are some examples of version branch names:
|
|
|
|
|
|
@@ -116,8 +117,8 @@ Here are some examples of version branch names:
|
|
### Aliases
|
|
### Aliases
|
|
|
|
|
|
It is possible to alias branch names to versions. For example, you could alias
|
|
It is possible to alias branch names to versions. For example, you could alias
|
|
-`dev-master` to `1.0.x-dev`, which would allow you to require `1.0.x-dev` in all
|
|
|
|
-the packages.
|
|
|
|
|
|
+`dev-master` to `1.0.x-dev`, which would allow you to require `1.0.x-dev` in
|
|
|
|
+all the packages.
|
|
|
|
|
|
See [Aliases](articles/aliases.md) for more information.
|
|
See [Aliases](articles/aliases.md) for more information.
|
|
|
|
|
|
@@ -133,7 +134,7 @@ the `.gitignore`.
|
|
|
|
|
|
## Publishing to a VCS
|
|
## Publishing to a VCS
|
|
|
|
|
|
-Once you have a vcs repository (version control system, e.g. git) containing a
|
|
|
|
|
|
+Once you have a VCS repository (version control system, e.g. git) containing a
|
|
`composer.json` file, your library is already composer-installable. In this
|
|
`composer.json` file, your library is already composer-installable. In this
|
|
example we will publish the `acme/hello-world` library on GitHub under
|
|
example we will publish the `acme/hello-world` library on GitHub under
|
|
`github.com/username/hello-world`.
|
|
`github.com/username/hello-world`.
|
|
@@ -180,11 +181,11 @@ For more details on how package repositories work and what other types are
|
|
available, see [Repositories](05-repositories.md).
|
|
available, see [Repositories](05-repositories.md).
|
|
|
|
|
|
That's all. You can now install the dependencies by running Composer's
|
|
That's all. You can now install the dependencies by running Composer's
|
|
-`install` command!
|
|
|
|
|
|
+[`install`](03-cli.md#install) command!
|
|
|
|
|
|
**Recap:** Any git/svn/hg repository containing a `composer.json` can be added
|
|
**Recap:** Any git/svn/hg repository containing a `composer.json` can be added
|
|
to your project by specifying the package repository and declaring the
|
|
to your project by specifying the package repository and declaring the
|
|
-dependency in the `require` field.
|
|
|
|
|
|
+dependency in the [`require`](04-schema.md#require) field.
|
|
|
|
|
|
## Publishing to packagist
|
|
## Publishing to packagist
|
|
|
|
|
|
@@ -196,15 +197,16 @@ repository for `monolog/monolog`. How did that work? The answer is Packagist.
|
|
|
|
|
|
[Packagist](https://packagist.org/) is the main package repository for
|
|
[Packagist](https://packagist.org/) is the main package repository for
|
|
Composer, and it is enabled by default. Anything that is published on
|
|
Composer, and it is enabled by default. Anything that is published on
|
|
-Packagist is available automatically through Composer. Since monolog
|
|
|
|
-[is on packagist](https://packagist.org/packages/monolog/monolog), we can depend
|
|
|
|
-on it without having to specify any additional repositories.
|
|
|
|
|
|
+Packagist is available automatically through Composer. Since
|
|
|
|
+[Monolog is on Packagist](https://packagist.org/packages/monolog/monolog), we
|
|
|
|
+can depend on it without having to specify any additional repositories.
|
|
|
|
|
|
If we wanted to share `hello-world` with the world, we would publish it on
|
|
If we wanted to share `hello-world` with the world, we would publish it on
|
|
Packagist as well. Doing so is really easy.
|
|
Packagist as well. Doing so is really easy.
|
|
|
|
|
|
-You simply hit the big "Submit Package" button and sign up. Then you submit
|
|
|
|
-the URL to your VCS repository, at which point Packagist will start crawling
|
|
|
|
-it. Once it is done, your package will be available to anyone.
|
|
|
|
|
|
+You simply visit [Packagist](https://packagist.org) and hit the "Submit". This
|
|
|
|
+will prompt you to sign up if you haven't already, and then allows you to
|
|
|
|
+submit the URL to your VCS repository, at which point Packagist will start
|
|
|
|
+crawling it. Once it is done, your package will be available to anyone!
|
|
|
|
|
|
← [Basic usage](01-basic-usage.md) | [Command-line interface](03-cli.md) →
|
|
← [Basic usage](01-basic-usage.md) | [Command-line interface](03-cli.md) →
|