12 KiB
Composer Schema of Asset
Properties
requires
Lists packages required by this package. The package will not be installed unless those requirements can be met.
requires-dev (root-only)
Lists 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.
extra.asset-repositories (root-only)
Because the plugin is installed after the analysis of type repositories, the custom types must
be included in a special property in extra composer.
Custom package repositories to use.
By default composer just uses the packagist repository. By specifying repositories you can get packages from elsewhere.
Repositories are not resolved recursively. You only can add them to your
main composer.json. Repository declarations of dependencies' composer.jsons are ignored.
The following repository types are supported:
- npm-vcs: The version control system repository can fetch packages from git with
package.jsonfile dedicated to NPM. Theurlproperty of git source code is required. - bower-vcs: The version control system repository can fetch packages from git with
bower.jsonfile dedicated to Bower. Theurlproperty of git source code is required.
extra.asset-registry-options (root-only)
Options available for the asset registers:
- npm-searchable (bool): The search in the NPM registry may be disabled with this option for the search command.
- bower-searchable (bool): The search in the Bower registry may be disabled with this option for the search command.
Mapping asset file to composer package
NPM mapping
The package.json of asset repository is automatically converted to a Complete Package instance with:
| NPM Package | Composer Package |
|---|---|
| name | name (npm-asset/{name}) |
npm-asset-library |
type |
| description | description |
| version | version |
| keywords | keywords |
| homepage | homepage |
| license | license |
| author | authors [0] |
| contributors | authors [n], merging with author |
| dependencies | require |
| devDependencies | require-dev |
| bin | bin |
| bugs | extra.npm-asset-bugs |
| files | extra.npm-asset-files |
| main | extra.npm-asset-main |
| man | extra.npm-asset-man |
| directories | extra.npm-asset-directories |
| repository | extra.npm-asset-repository |
| scripts | extra.npm-asset-scripts |
| config | extra.npm-asset-config |
| bundledDependencies | extra.npm-asset-bundled-dependencies |
| optionalDependencies | extra.npm-asset-optional-dependencies |
| engines | extra.npm-asset-engines |
| engineStrict | extra.npm-asset-engine-strict |
| os | extra.npm-asset-os |
| cpu | extra.npm-asset-cpu |
| preferGlobal | extra.npm-asset-prefer-global |
| private | extra.npm-asset-private |
| publishConfig | extra.npm-asset-publish-config |
not used |
time |
not used |
support |
not used |
conflict |
not used |
replace |
not used |
provide |
not used |
suggest |
not used |
autoload |
not used |
autoload-dev |
not used |
include-path |
not used |
target-dir |
not used |
extra |
not used |
archive |
Bower mapping
The bower.json of asset repository is automatically converted to a Complete Package instance with:
| Bower Package | Composer Package |
|---|---|
| name | name (bower-asset/{name}) |
bower-asset-library |
type |
| description | description |
| version | version |
| keywords | keywords |
| license | license |
| dependencies | require |
| devDependencies | require-dev |
| bin | bin |
| main | extra.bower-asset-main |
| ignore | extra.bower-asset-ignore |
| private | extra.bower-asset-private |
not used |
homepage |
not used |
time |
not used |
authors |
not used |
support |
not used |
conflict |
not used |
replace |
not used |
provide |
not used |
suggest |
not used |
autoload |
not used |
autoload-dev |
not used |
include-path |
not used |
target-dir |
not used |
extra |
not used |
archive |
Verison conversion
NPM and Bower use Semver for formatting the versions, which is not the case for Composer. It is therefore necessary to perform a conversion, but it's not perfect because of the differences in operation between Semver and Composer.
Here are the matches currently validated:
| Semver version | Composer version |
|---|---|
| 1.2.3 | 1.2.3 |
| 1.2.3alpha | 1.2.3-alpha1 |
| 1.2.3-alpha | 1.2.3-alpha1 |
| 1.2.3a | 1.2.3-alpha1 |
| 1.2.3a1 | 1.2.3-alpha1 |
| 1.2.3-a | 1.2.3-alpha1 |
| 1.2.3-a1 | 1.2.3-alpha1 |
| 1.2.3b | 1.2.3-beta1 |
| 1.2.3b1 | 1.2.3-beta1 |
| 1.2.3-b | 1.2.3-beta1 |
| 1.2.3-b1 | 1.2.3-beta1 |
| 1.2.3beta | 1.2.3-beta1 |
| 1.2.3-beta | 1.2.3-beta1 |
| 1.2.3beta1 | 1.2.3-beta1 |
| 1.2.3-beta1 | 1.2.3-beta1 |
| 1.2.3rc1 | 1.2.3-RC1 |
| 1.2.3-rc1 | 1.2.3-RC1 |
| 1.2.3rc2 | 1.2.3-RC2 |
| 1.2.3-rc2 | 1.2.3-RC2 |
| 1.2.3rc.2 | 1.2.3-RC.2 |
| 1.2.3-rc.2 | 1.2.3-RC.2 |
| 1.2.3+0 | 1.2.3-patch0 |
| 1.2.3-0 | 1.2.3-patch0 |
| 1.2.3pre | 1.2.3-beta1 |
| 1.2.3-pre | 1.2.3-beta1 |
| 1.2.3dev | 1.2.3-dev |
| 1.2.3-dev | 1.2.3-dev |
| 1.2.3+build2012 | 1.2.3-patch2012 |
| 1.2.3-build2012 | 1.2.3-patch2012 |
| 1.2.3+build.2012 | 1.2.3-patch.2012 |
| 1.2.3-build.2012 | 1.2.3-patch.2012 |
| latest | default |
Range verison conversion
NPM and Bower use Semver for formatting the range versions, which is not the case for Composer. It is therefore necessary to perform a conversion, but it's not perfect because of the differences in operation between Semver and Composer.
Here are the matches currently validated:
| Semver range version | Composer range version |
|---|---|
| >1.2.3 | >1.2.3 |
| > 1.2.3 | >1.2.3 |
| <1.2.3 | <1.2.3 |
| < 1.2.3 | <1.2.3 |
| >=1.2.3 | >=1.2.3 |
| >= 1.2.3 | >=1.2.3 |
| <=1.2.3 | <=1.2.3 |
| <= 1.2.3 | <=1.2.3 |
| ~1.2.3 | ~1.2.3 |
| ~ 1.2.3 | ~1.2.3 |
| ~1 | ~1 |
| ~ 1 | ~1.2.3 |
| ^1.2.3 | >=1.2.3,<2.0 |
| ^ 1.2.3 | >=1.2.3,<2.0 |
| >1.2.3 <2.0 | >1.2.3,<2.0 |
>=1.0 <1.1 ¦¦ >=1.2 |
>=1.0,<1.1¦>=1.2 |
| 1.2.3 - 2.3.4 | >=1.2.3,<=2.3.4 |
URL Range verison conversion
NPM and Bower can use a URL directly as the version of the dependency, which is not the case for Composer. It is therefore necessary to perform a conversion, but it's not perfect because of the differences in operation between NPM/Bower and Composer.
| Asset URL version | Composer version |
|---|---|
| {URL} | dev-default |
| {URL}#1.2.3 | dev-1.2.3 | 1.2.3 (branch or tag) |
| {URL}#{branch} | dev-{branch} |
| {URL}#{sha} | dev-default#{sha} |
Multiple versions of a depdendency in the same project
NPM and Bower can add multiple versions of the same dependency, which is not the case for Composer.
To overcome this limitation, the plugin adds a VCS repository for each required version, with the
name including the version number after the character -
({ASSET-TYPE}-asset/{PACKAGE-NAME}-X.Y.Z).
A Vcs repository will be created for each version, and the number of requests is proportional to the number of versions required. However, given that each version of the dependency uses the same URL of the VCS repository, subsequent requests will get the package information directly in the cache. However, a cache of files is created for each version (included in require section) of a same dependency.
Asset Repository
The plugin creates Composer Repositories to find and create
the VCS repository of the asset defined in the require and require-dev automatically.
NPM Composer Repository
NPM Package is the main NPM repository. A NPM Composer repository
is basically a package source, i.e. a place where you can get packages from. NPM Package aims to
be the central repository that everybody uses. This means that you can automatically require
any package that is available there.
If you go to the NPM website, you can browse and search for packages.
All package names are automatically prefixed with npm-asset/.
Bower Composer Repository
Bower Package is the main Bower repository. A Bower Composer repository
is basically a package source, i.e. a place where you can get packages from. Bower Package aims to
be the central repository that everybody uses. This means that you can automatically require
any package that is available there.
If you go to the Bower website, you can browse and search for packages.
All package names are automatically prefixed with bower-asset/.