使用Composer(通过SVN)添加一个包

18

我为我的个人PHP库创建了一个SVN代码库,并在根目录下添加了一个composer.json文件:

{
        "name": "myPersonalLibrary/lib",
        "type": "library",
        "description": "Light MVC framework for PHP 5.4",
        "keywords": ["database","mvc"],
        "homepage": "http://mysite.com",
        "license": "MIT",
        "require": {
                "php": ">=5.3.0",
                "mustache/mustache": "dev-master"
        },
        "autoload": {
                "psr-0": {
                        "bbn": "src"
                }
        }
}

然后我创建了一个带有以下composer.json的项目:

{
    "require": {
        "monolog/monolog": "1.0.*",
        "zerkalica/php-code-sniffer": "dev-master",
        "mustache/mustache": "dev-master",
        "myPersonalLibrary/lib": "*"
    },
    "repositories": [
            {
                    "type": "svn",
                    "url": "https://mysite.com/svn/myPersonalLibrary",
                    "branches-path": false,
                    "tags-path": false,
                    "trunk-path": "src"
            }
    ]
}

当我尝试更新我的项目时,我遇到了以下问题:No valid composer.json was found in any branch or tag of https...

我认为这个问题来自于我的文件结构,但是我找不到任何关于此的文档:

/my_repo
  /src
    /lib
      /api
      /db
      /file
      /html
      ....
      /mvc.php
      /obj.php
  /composer.json
我尝试在packagist.org上发布我的URL,但收到了“在给定的URL中找不到有效/受支持的存储库”的错误提示。

我尝试在packagist.org上发布我的URL,但收到了在给定的URL中找不到有效/受支持的存储库的错误提示。


1
'composer.json' 不应该位于 /my_repo/src/ 下面吗? - bahrep
9
我明白了。 composer.json 应该在主目录中。是的,packagist 必须有一个主目录。如果你想要分支和标签,每个标签和分支都必须有自己的 composer.json。原因很简单,每个版本都是独特的,可能具有不同的要求/依赖项。仅在仓库根目录中拥有一个文件不会长久存在。 - Seldaek
@jamie0726 也许不是我不知道,我已经像其他人一样转移到了Github,但是总有一天我宁愿将其工作在我的svn上。你为什么说命名空间无效? - Nabab
1
@Nabab 我最近在旧金山的Symfony Live 12上观看了有关Composer的视频。其中提供了非常有用的技巧(例如,他解释了如何拥有自己的私人packagist.com):http://symfony.com/video/26/in-depth-with-composer/English - herrjeh42
1
你尝试过使用 composer self-update 命令来更新 Composer(永远不知道...)吗? - Thierry M.S.
显示剩余12条评论
2个回答

13

如果您使用官方推荐的仓库布局,其中包含一个“项目根目录”(该目录恰好包含三个子目录:/trunk/branches/tags),那么这应该适用于您:

对于您的 PHP 库,请在项目根目录下的 trunk 中创建 composer.json 文件(并提交它)。例如:

{
    "name": "myProject/myLibrary",
    "description": "My Personal Library",
    "license": "proprietary",
    "require": {
        "php": ">=5.3"
    },
    "autoload": {
        "classmap": ["src/"]
    }
}

假设你的库存储库可从 http://svn.example.com/path/to/myLibrary 访问。布局将如下所示:

/path/to/myLibrary
  /trunk
    /composer.json
    /src
      ...
  /branches
  /tags

然后,在您的项目中,您想要使用您的库时,请创建带有以下内容的composer.json:

{
    "repositories": [
        {
            "type": "vcs",
            "url": "http://svn.example.com/path/to/myLibrary"
        }
    ],
    "require": {
        "nette/nette": "~2.2",
        "myProject/myLibrary": "@dev"
    }
}

如果你的库中只有 composer.json ,那么关键是将 @dev 用作所需版本。 一旦你从主干创建标记,就可以开始使用版本号。例如,如果你执行 svn copy ^/trunk ^/tags/1.0.0 ,那么你可以使用"myProject/myLibrary": "~1.0"作为版本号。


3

尝试调用composer update -v获取可能使用的版本字符串列表以获得更多信息。

例如,我得到了这个配置信息,正确的名称用于获取主干:

{
    "name": "sample/test",
    "type": "library",
    "version": "0.0.0",
    "time" : "2013-04-16",
    "description": "Testing ...",
    "repositories": [
        {
            "type": "svn",
            "url": "http://framework.zend.com/svn/framework/standard"
        }
    ],
    "require": {
        "php": ">=5.3.3",
        "zendframework/zendframework1" : "dev-trunk"
    }
}

当您使用-v参数调用composer时,您将获得分支、标签和主干的列表(如果有)。我不知道在路径中是否允许使用false作为标签和分支的名称。

$ composer update -v
Loading composer repositories with package information
Reading composer.json of zendframework/zendframework1 (release-0.1.1)
Skipped tag 0.1.1, no composer file was found
Reading composer.json of zendframework/zendframework1 (release-0.1.2)
Skipped tag 0.1.2, no composer file was found
Reading composer.json of zendframework/zendframework1 (release-0.1.3)
Skipped tag 0.1.3, no composer file was found
....
Reading composer.json of zendframework/zendframework1 (release-1.9.6)
Importing tag 1.9.6 (1.9.6.0)
Reading composer.json of zendframework/zendframework1 (release-1.9.7)
Importing tag 1.9.7 (1.9.7.0)
Reading composer.json of zendframework/zendframework1 (release-1.9.8)
Importing tag 1.9.8 (1.9.8.0)
Reading composer.json of zendframework/zendframework1 (trunk)
Importing branch trunk (dev-trunk)
Reading composer.json of zendframework/zendframework1 (bughuntday)
Skipped branch bughuntday, no composer file was found
Reading composer.json of zendframework/zendframework1 (development-2.0)
Skipped branch development-2.0, no composer file was found
Reading composer.json of zendframework/zendframework1 (pdo_ibm_ids_support)
Skipped branch pdo_ibm_ids_support, no composer file was found
Reading composer.json of zendframework/zendframework1 (release-1.0)
Importing branch release-1.0 (dev-release-1.0)
Reading composer.json of zendframework/zendframework1 (release-1.10)
Importing branch release-1.10 (dev-release-1.10)
....
Reading composer.json of zendframework/zendframework1 (release-1.8)
Importing branch release-1.8 (dev-release-1.8)
Reading composer.json of zendframework/zendframework1 (release-1.9)
Importing branch release-1.9 (dev-release-1.9)
Reading composer.json of zendframework/zendframework1 (rob_allen)
Skipped branch rob_allen, no composer file was found
Reading composer.json of zendframework/zendframework1 (user)
Skipped branch user, no composer file was found
Updating dependencies (including require-dev)

除了这行之外,您可以安全地忽略所有内容,该行告诉您必须设置的请求版本:

Importing branch trunk (dev-trunk)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接