7

我刚刚开始使用 Composer 功能,你告诉它查看本地目录的依赖项,这样你就可以开发一个库和并行使用该库的东西,而不必一直推送到 git 来更新,这是惊人的。例如

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

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

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

然而,我几乎用那个集合检查了我的项目的 composer.json - 这显然不会在其他任何人的机器上工作。

有没有办法告诉作曲家使用与composer.json不同的文件,或者以其他方式告诉作曲家安全地使用本地目录,而不会意外地将损坏的composer.json版本提交到您的存储库?

4

5 回答 5

9

使用COMPOSER环境变量

env COMPOSER=composer-dev.json composer install

它实际上至少从 2012 年就已经可用。

于 2016-10-18T10:12:58.390 回答
2

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

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

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

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

于 2013-06-18T22:42:17.803 回答
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"
    }
],

添加一个很小的 ​​PHP 脚本composerLocal.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 中提交的文件,因此您确实需要提交对库代码所做的更改。上述过程只是跳过了推送步骤。

于 2013-06-20T12:06:29.303 回答
0

这也应该有效:

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

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

于 2019-06-05T11:28:02.957 回答
-1

很简单,只需使用神器。

在存储库中添加:

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

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

像这样命名压缩文件:

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

例子:

querypath-QueryPath-3.0.0.zip

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

在 require 中像这样添加它并指定 zip 中定义的版本:

"querypath/QueryPath": "3.0.0",

使用这种方法,您将能够编辑供应商文件,并且 Composer 仍将更新与更改相关的任何自动加载器,并且不会影响您的更改。

于 2014-06-25T16:49:05.683 回答