我认为我必须将其包含在“repositories”中,如下所示:
"repositories": [
{
"url": "https://github.com/l3pp4rd/DoctrineExtensions.git",
"type": "git"
}
],
然后可能将其列在“require”部分中。它应该类似于this example,但它不起作用。它只会给出以下错误消息:
“您的要求无法解析为可安装的软件包集。”
有人尝试过像这样做吗?
"repositories": [
{
"url": "https://github.com/l3pp4rd/DoctrineExtensions.git",
"type": "git"
}
],
实际上,该包在 Packagist 上可用。在这种情况下,您不需要自定义存储库定义。只需确保添加一个匹配版本约束的 require
(始终需要)。
通常情况下,如果一个包在 Packagist 上可用,不要 添加 VCS 存储库。它只会减慢速度。
对于不在 Packagist 上可用的包,使用VCS (或 git)存储库,如您的问题所示。这样做时,请确保:
require
中包含相应包的名称require
中的版本约束与 VCS 存储库提供的版本匹配。您可以使用 composer show <packagename>
查找可用版本。在这种情况下,~2.3
是一个不错的选择。require
中的名称与远程 composer.json
中的名称相匹配。 在本例中,它是 gedmo/doctrine-extensions
。这里是通过 VCS 存储库安装相同软件包的示例 composer.json
:
{
"repositories": [
{
"url": "https://github.com/l3pp4rd/DoctrineExtensions.git",
"type": "git"
}
],
"require": {
"gedmo/doctrine-extensions": "~2.3"
}
}
VCS repo docs很好地解释了这一切。
如果有一个带有composer.json
的git(或其他VCS)存储库可用,则不要使用“package”存储库。包存储库需要您在定义中提供所有元数据,而将完全忽略所提供的分发和源中存在的任何composer.json
。它们还具有其他限制,例如在大多数情况下不允许进行适当的更新。
避免使用包存储库(请参阅文档)。
在2013年的写作时,这是一种可行的方法。Composer已经添加了对更好方法的支持:请参见@igorw的答案
你有代码库吗?
Composer支持Git、Mercurial和SVN。
你对代码库有写入权限吗?
有?
代码库是否有composer.json
文件?
如果你有一个可以写入的代码库:添加一个composer.json
文件,或者修复已有的文件,并且不要使用下面的解决方案。
前往@igorw的答案
仅当您没有代码库时,才使用此方法
或者如果代码库没有composer.json
并且您无法添加它
这将覆盖Composer从原始代码库的composer.json
中读取的所有内容,包括软件包的依赖项和自动加载。
使用package
类型将正确定义所有内容的负担转移到您身上。更简单的方法是在代码库中拥有一个composer.json
文件,并且直接使用它。
这个解决方案仅适用于极少数情况,例如您拥有一个无法更改的被遗弃的ZIP下载,或者一个只能读取但不再维护的代码库。
"repositories": [
{
"type":"package",
"package": {
"name": "l3pp4rd/doctrine-extensions",
"version":"master",
"source": {
"url": "https://github.com/l3pp4rd/DoctrineExtensions.git",
"type": "git",
"reference":"master"
}
}
}
],
"require": {
"l3pp4rd/doctrine-extensions": "master"
}
composer.json
,所以应该使用版本控制仓库。你的示例还破坏了自动加载并忽略了 branch-alias
。 - igorwautoload
字段,则不会被包括在内。基本上,您需要将 composer.json
中的所有信息复制粘贴到存储库定义中。VCS 存储库会直接从 VCS 中获取该信息。branch-alias
的好处在 别名文档 和我写的博客文章中有解释。 - igorw您可以像这样将git仓库添加到composer.json中:
"repositories": [
{
"type": "package",
"package": {
"name": "example-package-name", //give package name to anything, must be unique
"version": "1.0",
"source": {
"url": "https://github.com/example-package-name.git", //git url
"type": "git",
"reference": "master" //git branch-name
}
}
}],
"require" : {
"example-package-name": "1.0"
}
composer.json
文件。 - Sven我尝试加入这里提到的解决方案,因为有一些需要列出的重要点。
如@igorw的回答中所述,在这种情况下,必须在composer.json文件中指定存储库的URL,然而,由于在两种情况下都必须存在composer.json(不像@Mike Graf的第二种方式),将其发布到Packagist并没有那么大的区别(此外Github目前也提供类似npm包的服务),唯一的区别是在注册后在Packagist界面上输入URL。
此外,它有一个缺点,即无法依赖使用此方法的外部库,因为递归存储库定义在Composer中不起作用。此外,由于它,似乎存在一个“错误”,因为递归定义在依赖项处失败,重新在根中显式指定存储库似乎还不够,还必须重新指定来自软件包的所有依赖项。
使用composer文件(由igorw于2012年10月18日15:13回答)
{
"repositories": [
{
"url": "https://github.com/l3pp4rd/DoctrineExtensions.git",
"type": "git"
}
],
"require": {
"gedmo/doctrine-extensions": "~2.3"
}
}
"repositories": [
{
"type":"package",
"package": {
"name": "l3pp4rd/doctrine-extensions",
"version":"master",
"source": {
"url": "https://github.com/l3pp4rd/DoctrineExtensions.git",
"type": "git",
"reference":"master"
}
}
}
],
"require": {
"l3pp4rd/doctrine-extensions": "master"
}
composer update --prefer-source
或者:
composer install --prefer-source
我遇到了以下错误:请求的包my-foo/bar在任何版本中都找不到,可能是包名称有误。
如果您要复制另一个存储库以进行自己的更改,则会得到一个新的存储库。
例如:
https://github.com/foo/bar.git
=>
https://github.com/my-foo/bar.git
{
"name": "foo/bar",
=>
{
"name": "my-foo/bar",
composer.json
内的name
属性中的名称。 - Sven"dev-master#4536bbc166ada96ff2a3a5a4b6e636b093103f0e"
。 - Blaskovicz如果您想使用来自GitHub的composer.json
,您可以查看this example(在VCS部分下)。
包部分是用于没有composer.json
的包。但是,您也没有遵循该示例,否则它也可以工作。请阅读有关软件包存储库的说明:
基本上,您定义与composer存储库的
packages.json
中包含的相同信息,但仅针对单个软件包。再次强调,最少需要的字段是名称、版本和dist或source之一。
https://dev59.com/k2cs5IYBdhLWcg3wTyRl#14485706
{
"repositories": [
{
"type":"package",
"package": {
"name": "tiagof2/materializecss-laravel-pagination",
"version":"v1.0.3",
"source": {
"url": "https://github.com/tiagofrancafernandes/materializecss-laravel-pagination.git",
"type": "git",
"reference":"v1.0.3"
}
}
}
],
"require": {
"tiagof2/materializecss-laravel-pagination": "v1.0.3"
},
}
composer update
composer.json
中给出的名称。 - igorw