Composer选项使用composer.json的替代方法?

时间:2013-06-18 17:03:02

标签: composer-php

我刚开始使用Composer功能,你可以告诉它查看本地目录中的依赖项,这样你就可以开发一个库和一些并行使用该库的东西,而不必一直推送到git来更新,这太棒了。 e.g。

"repositories": [
    {
        "type": "vcs",
        "url": "/documents/projects/github/guzzle"
    }
],

"require":{
    "guzzle/guzzle": "3.7.*@dev"
}

因此,当您进行作曲家更新时,Composer将从本地目录中提取Guzzle的版本,因此您可以在另一个使用该库的应用程序中测试库的代码,而无需在每个代码之间推送到存储库变化

然而,我几乎在composer.json中检查了我的项目 - 这显然不适用于任何elses机器。

无论如何要告诉作曲家使用与composer.json不同的文件,或以其他方式告诉作曲家安全地使用本地目录,而不会很有可能意外地将一个破碎的composer.json版本提交给你存储库

5 个答案:

答案 0 :(得分:5)

使用COMPOSER environment variable

env COMPOSER=composer-dev.json composer install

实际上已有since at least 2012

答案 1 :(得分:2)

您可以将选项--prefer-source添加到composer install/update命令,并删除本地存储库引用,而不是从其他位置的本地存储库获取。

这样作曲家会将git clone软件调用到供应商目录中,你可以开发你的软件并提交供应商软件,因为这也是一个完全正常工作的git repo。

实际上不建议添加本地存储库引用。当它用于真正的本地软件时它可以工作,但维护它有它的开销:你必须在每个将加载该软件的composer.json文件中提到这个存储库,即使它只是间接依赖(即你添加一个软件)需要此软件作为本地仓库中的依赖项)。

对存储库的URL进行硬编码也会阻止您随意更改它。即使你可以移动repo并相应地更改URL,你的软件的所有旧版本仍然在composer.json和composer.lock文件中都有旧的URL,并且会尝试从那里加载。

答案 2 :(得分:0)

看起来似乎没有办法在Composer中很好地完成这项工作,但是有可能破解它。

在您的composer.json文件中,您可以在某些数据中添加注释。

{  
"name": "base-reality/intahwebz",

"//":   "LOCALHACK",

"require":{
    "base-reality/php-to-javascript": ">=0.1.17",
    "guzzle/danackguzzle": "3.3.*@dev",
     ... 
     ...
    }
    ...
} 

然后有一个单独的文件composer.local(未提交给Git),其中包含对本地目录的引用:

"LOCALHACK",

"repositories": [
    {
        "type": "vcs",
        "url": "/documents/projects/github/intahwebz-core"
    }
],

添加一个名为composerLocal.php的小型PHP脚本来生成新的composer.json文件

<?php

$srcFile = file_get_contents("composer.json");
$hackFile = file_get_contents("composer.local");
$finalString = str_replace('"LOCALHACK",', $hackFile, $srcFile);
file_put_contents("composer.json", $finalString);

?>

一个名为localupdate.sh的小bash脚本备份真正的composer.json文件,生成被黑客攻击的composer.json,运行Composer然后恢复原始的composer.json文件

cp -f composer.json composer.json.bak
php composerLocal.php
composer update
cp -f composer.json.bak composer.json

运行localupdate.sh脚本允许您在本地测试提交,而不会有修改项目使用的实际composer.json文件的危险,因此不小心将无效的composer.json推入存储库的可能性更小。

请注意,Composer不读取存储库目录中的文件,它会读取Git中的提交文件,因此您需要提交对库代码所做的更改。上述过程只是跳过推进步骤。

答案 3 :(得分:0)

这也应该起作用:

  composer config --file=composer2.json && composer install

请参阅https://getcomposer.org/doc/03-cli.md#usage

答案 4 :(得分:-1)

简单,只需使用神器。

在存储库中添加:

{
    "type": "artifact",
    "url": "path/to/artifact/files/"
},

现在您只需创建目录并将存储库的副本压缩到该目录。

如下所示命名压缩文件:

[vendorname]-[packagename]-[version].zip

示例:

querypath-QueryPath-3.0.0.zip

现在您可以在本地修改包,它将从zip文件而不是在线仓库中提取。

在require中添加它,并指定zip中定义的版本:

"querypath/QueryPath": "3.0.0",

使用此方法,您将能够编辑供应商文件,并且编辑器仍将更新相对于更改的任何自动加载器,它将仅保留您的更改。