我已经分叉https://github.com/jasonlewis/basset,现在正在尝试将我的fork添加到我的项目中。但是,在我运行composer.json
后,它似乎没有读取我的分叉composer update
文件,为什么?我做错了什么?
我在repository
之后添加了require: {}
:
"repositories": [
{
"type":"package",
"package": {
"name": "marwelln/basset",
"version":"master",
"source": {
"url": "https://github.com/Marwelln/basset.git",
"type": "git",
"reference":"master"
}
}
}
],
我的分叉composer.json
看起来像这样(除了名字之外没有任何改变):
{
"name": "marwelln/basset",
"description": "A better asset management package for Laravel.",
"keywords": ["assets", "basset", "laravel"],
"license": "BSD-2-Clause",
"authors": [
{
"name": "Jason Lewis",
"email": "jason.lewis1991@gmail.com"
}
],
"require": {
"php": ">=5.3.0",
"kriswallsmith/assetic": "1.1.*"
},
"require-dev": {
"mockery/mockery": ">=0.7.2",
"illuminate/config": "4.0.*",
"illuminate/console": "4.0.*",
"illuminate/filesystem": "4.0.*",
"illuminate/log": "4.0.*",
"illuminate/routing": "4.0.*",
"illuminate/support": "4.0.*",
"symfony/process": "2.3.*"
},
"suggest": {
"aws/aws-sdk-php": "Deploy static assets directly to your S3 buckets.",
"rackspace/php-cloudfiles": "Deploy static assets directly to your Cloud Files container."
},
"autoload": {
"psr-0": {
"Basset": "src/"
},
"classmap": [
"tests/Cases/FilterTestCase.php"
],
"files": ["src/helpers.php"]
},
"extra": {
"branch-alias": {
"dev-master": "4.0-dev"
}
},
"minimum-stability": "dev"
}
有了这个,Basset
名称空间未在autoload_namespace.php
中注册,也未在"kriswallsmith/assetic": "1.1.*"
中注册,但如果我使用原始require: { "jasonlewis/basset" : "dev-master"}
,则会添加它。我错过了什么?
答案 0 :(得分:1)
你做过一些被认为不是Composer最佳实践的东西。
首先,您应该尽量避免包含“package”类型的存储库,其中包含查找所需内容的所有详细信息。从长远来看,这将成为维护的噩梦。如果您完全确定软件的维护者不会自己包含composer.json
文件,那么软件包应该只包含在您的composer.json
中。文档陈述http://getcomposer.org/doc/04-schema.md#repositories:
包:如果依赖于对composer没有任何支持的项目,您可以使用包存储库内联定义包。你基本上只是内联 composer.json对象。
这种情况不适用于此,因为您维护存储库以便自己使用,并且应该能够放入composer.json
。
现在,Composer支持分叉和扩展现有库,然后在代码中使用它的过程,但不是你的方式。首先,您应该替换供应商的名称,因为您接管了该角色,并且您的存储库和软件应该与其他软件包区分开来。因此,将“jasonlewis / basset”重命名为“marwelln / basset”是正确的,只有在您想引用自己的版本时才使用该名称。
现在的问题可能是,如果你分叉一个流行的库,并使用其他需要原始库的库,你最终会添加两个包。这就是“替换”字段的用途:您可以在自己的composer.json
中声明您认为您的软件包能够替换原始软件。有些详细信息,请访问:http://getcomposer.org/doc/04-schema.md#replace
我在这里详细解答了“替换”的工作原理:How does the "replace" property work with composer?
最后,我认为你应该做以下事情(你仍然可以改变它):
克隆原始内容,将composer.json
更改为您自己的供应商名称作为“名称”,并添加“替换”您正在更改的原始软件的版本。你可能应该对版本严格,因为你真的只替换你所知道的版本。如果以后您仍然知道更换新版本,则可以更改“替换”信息。
然后你必须像你一样添加你自己的存储库,并要求软件名称和你自己的供应商名称。
您可能在某个时间点完成了大部分操作,但添加替换信息的步骤是缺少的链接。
答案 1 :(得分:0)
我将repository
更改为:
"repositories": [
{
"type":"vcs",
"url": "https://github.com/Marwelln/basset"
}
],
然后使用jasonlewis/basset
代替marwelln/basset
。它现在正在按预期工作。