Composer php Composer选项是否使用Composer.json的替代方案?

Composer php Composer选项是否使用Composer.json的替代方案?,composer-php,Composer Php,我刚刚开始使用Composer特性,您告诉它查看本地目录中的依赖项,这样您就可以开发一个库和一些并行使用该库的东西,而不必一直推到git进行更新,这真是太棒了。e、 g "repositories": [ { "type": "vcs", "url": "/documents/projects/github/guzzle" } ], "require":{ "guzzle/guzzle": "3.7.*@dev" } 因此,当您执行co

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

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

"require":{
    "guzzle/guzzle": "3.7.*@dev"
}
因此,当您执行composer更新时,composer将从本地目录中提取Guzzle的版本,这样您就可以在使用该库的另一个应用程序中测试库的代码,而无需在每次代码更改之间推送到存储库

然而,我几乎用这个集合为我的项目签入了composer.json,这显然不适用于任何其他机器


是否有其他方法可以告诉composer使用与composer.json不同的文件,或者告诉composer安全使用本地目录,如果不太可能意外地将损坏的composer.json版本提交到您的存储库中?

您可以在
composer install/update
命令中添加选项
--preference source
,而不是从其他地方的本地存储库中获取,并删除本地存储库引用

这样composer将调用git将软件克隆到供应商目录中,您可以开发软件并提交给供应商软件,因为这也是一个完全工作的git repo

不建议添加本地存储库引用。当将它们用于真正的本地软件时,它是有效的,但维护它会增加开销:您必须在加载该软件的每个composer.json文件中提到该存储库,即使它只是一个间接依赖项(即,您在本地repo中添加了一个需要该软件作为依赖项的软件)


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

看起来在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);

?>
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不会从respository目录中读取文件,而是读取Git中提交的文件,因此您确实需要提交对库代码所做的更改。上述过程跳过了推送步骤。

简单,只需使用工件即可

在存储库中添加以下内容:

{
    "type": "artifact",
    "url": "path/to/artifact/files/"
},
现在您只需要创建目录并将存储库的副本压缩到该目录中

将压缩文件命名为:

[vendorname]-[packagename]-[version].zip
例如:

querypath-QueryPath-3.0.0.zip
现在您可以在本地修改包,它将从zip文件而不是在线repo中提取

在“需要”中,按原样添加,并指定zip中定义的版本:

"querypath/QueryPath": "3.0.0",
使用此方法,您将能够编辑供应商文件,composer仍将更新与更改相关的任何自动加载程序,并且它将保留您的更改。

使用:


它实际上已经可用。

这也应该可以:

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

请参见

我知道如何编辑composer.json文件。问题是“是否有必要告诉composer使用与composer.json不同的文件”,以避免编辑composer.json。对不起,miss理解了问题的要点。我以为您想编辑库,让composer将它们放在一边。这似乎不起作用,表明composer不记得上一个命令中的文件参数。
  composer config --file=composer2.json && composer install