阻止 Composer 更新重新安装
Posted
技术标签:
【中文标题】阻止 Composer 更新重新安装【英文标题】:prevent Composer update to reinstall 【发布时间】:2019-08-05 07:20:29 【问题描述】:我有一个带有一些依赖项的 Laravel 项目。这些依赖项之一是我们自己的包。我需要处理那个包。设置是我将我们的包符号链接到一个 git 存储库。
vendor/acme/ourpackage -> ~/ourpackagerepo
我在存储库中进行更改、提交,然后在父级中运行 Composer update 以获取更新的 composer.lock。这曾经工作得很好。但是在我们从 Gitlab 迁移到 Github 之后,composer update acme/ourpackage
会:
从而覆盖符号链接!然后我必须删除文件夹并创建一个新的符号链接才能继续工作。这很麻烦,主要是因为 phpStorm 需要重新索引。
来自 composer.json 的片段:
"repositories": [
"type": "vcs",
"url": "git@github.com:acme/package.git"
"config":
"preferred-install": "dist",
"platform":
"php": "7.0.12"
,
"use-github-api": false
关于如何让 composer 只更新,或者让 tha 文件单独更新,只更新 composer.lock 的任何想法?
【问题讨论】:
composer update acme/ourpackage --lock 说:“无需安装或更新”并且.lock 文件未更新 将其添加为路径而不是存储库:getcomposer.org/doc/05-repositories.md#path 感谢您的回答,但我不明白当我部署到服务器时会如何工作。当 composer 不知道 git-repository 在哪里时,如何安装包? @jrewing 你能解决这个问题吗?我的回答有帮助吗? 感谢您的回答,我会尽快查看,我可能与您在不同的时区:) 【参考方案1】:我认为您在这里有几个选择:
1。 Composer 存储库路径
作为pointed out by @Loek,您可以使用路径 存储库。这是为了解决通常不属于 VCS(版本控制系统,例如 Git)或作为文件工件的场景。根据文档,您可以这样使用它:
"repositories": [
"type": "path",
"url": "../../packages/my-package",
"options":
"symlink": true
],
"require":
"my/package": "*"
最需要注意的部分是这个:
如果可能,本地包将被符号链接,在这种情况下 控制台中的输出将读取 Symlinking from ../../packages/我的包。如果符号链接是不可能的包 将被复制。在这种情况下,控制台将输出 Mirrored from ../../packages/my-package.
代替默认的回退策略你可以强制使用符号链接 "symlink": true 或使用 "symlink": false 选项进行镜像。强迫 在从 单体存储库。
这个选项对我来说最有意义,也是我个人会选择的。
2。带环境变量的多个 Composer 配置
另一种选择是使用COMPOSER
环境变量as described here。这将允许您加载与默认命名文件不同的composer.json
文件。所以你可能有两个文件,根据你设置的环境变量,它会加载适当的文件并创建一个匹配的锁文件:
好吧,那你到底为什么要这样做呢?好吧,由于您尝试在本地处理包的方式(使用活动的符号链接),但不希望在生产中发生这种情况,如果第一个选项没有,这可能会起作用。
我应该注意,您的目标应该始终是拥有一个在不同环境(即本地、暂存、生产)中工作相同的单一配置。我了解您希望立即在您的应用程序中查看对您的存储库的本地更改,并且为每个更改执行提交/推送/拉取过程是荒谬的。
其他阅读/资源:
https://github.com/composer/composer/issues/601
https://github.com/composer/composer/issues/4011
https://github.com/franzliedke/studio
【讨论】:
我认为将两者结合起来可能会奏效。因为如果我只使用路径,部署(composer install)将无法在生产服务器上工作。但是,如果我在本地使用路径(在替代 composer.json 中)并在其他任何地方使用存储库,它可能会起作用以上是关于阻止 Composer 更新重新安装的主要内容,如果未能解决你的问题,请参考以下文章
--enable-phar=shared 我是不是必须重新编译 PHP 才能安装 Composer?
在 ubuntu 18.04.4LTS 上重新安装 gitlab 后,gitlab-reconfigure 在 redis 上被阻止