使用 Composer 添加包(通过 SVN)
Posted
技术标签:
【中文标题】使用 Composer 添加包(通过 SVN)【英文标题】:Adding a package with Composer (through SVN) 【发布时间】:2012-12-15 03:48: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 并得到 No valid/supported repository was found at the given URL
【问题讨论】:
'composer.json' 不应该在 /my_repo/src/ 下吗? composer.json 是否有效?没有剩余的逗号什么的? 啊,我明白了。 composer.json 应该在主干目录中。是的,必须有一个trunk/用于packagist。如果你想要分支和标签,每个标签和分支也必须有自己的 composer.json。原因很简单,每个版本都是独一无二的,并且可能有不同的需求/依赖关系。在存储库的根目录下只有一个文件不会长久。 @Nabab 我最近在旧金山的 Symfony Live 12 上观看了这个关于 Composer 的视频。非常有用的提示(例如,他解释了如何拥有自己的私人 packagist.com):symfony.com/video/26/in-depth-with-composer/English 您是否尝试过使用composer self-update
更新作曲家(不知道...)?
【参考方案1】:
如果您使用官方推荐的带有“项目根”的存储库布局(其中恰好包含三个子目录:/trunk
、/branches
和 /tags
),那么这应该适合您:
为您的 PHP 库在主干的项目根目录中创建 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"
作为您的版本号。
【讨论】:
【参考方案2】:尝试调用 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 作为参数调用作曲家,如果找到,您将获得分支、标签和主干的列表。我不知道是否允许 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)
【讨论】:
以上是关于使用 Composer 添加包(通过 SVN)的主要内容,如果未能解决你的问题,请参考以下文章
使用 composer 将非 laravel 包添加到我的 Laravel 项目中