Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/237.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 防止重新安装编写器更新_Php_Laravel_Git_Github_Composer Php - Fatal编程技术网

Php 防止重新安装编写器更新

Php 防止重新安装编写器更新,php,laravel,git,github,composer-php,Php,Laravel,Git,Github,Composer Php,我有一个Laravel项目,有一些依赖项。其中一个依赖项是我们自己的包。我需要做那个包裹的工作。设置是将我们的包符号链接到git存储库 供应商/acme/ourpackage->~/ourpackagerepo 我在存储库中进行更改,提交,然后在父级中运行Composer update以获得更新的Composer.lock。这过去很管用。但在我们从Gitlab迁移到Github之后,composer update acme/ourpackage会: 删除acme/ourpackage(开发功能

我有一个Laravel项目,有一些依赖项。其中一个依赖项是我们自己的包。我需要做那个包裹的工作。设置是将我们的包符号链接到git存储库

供应商/acme/ourpackage->~/ourpackagerepo


我在存储库中进行更改,提交,然后在父级中运行Composer update以获得更新的Composer.lock。这过去很管用。但在我们从Gitlab迁移到Github之后,
composer update acme/ourpackage
会:

  • 删除acme/ourpackage(开发功能/fixedinformationlog fae89ac)
  • 安装acme/ourpackage(开发功能/fixedinformationlog 9bd7d4d):
从而覆盖符号链接!然后我必须删除文件夹并创建一个新的符号链接才能继续工作。这是一个麻烦,主要是因为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只更新,或者不更新文件而只更新composer.lock,你有什么想法吗?

我想你有几个选择:

1.编写器存储库路径 如图所示,您可以使用路径存储库。这是为了解决通常不属于VCS(如Git等版本控制系统)或文件工件的情况。根据文档,您可以这样使用它:

{
    "repositories": [
        {
            "type": "path",
            "url": "../../packages/my-package",
            "options": {
                "symlink": true
            }
        }
    ],
    "require": {
        "my/package": "*"
    }
}
需要注意的最重要的部分是:

如果可能,本地包将被符号链接,在这种情况下 控制台中的输出将从中读取符号链接 ../../packages/my packages。如果无法进行符号链接,则该软件包 将被复制。在这种情况下,控制台将从镜像输出 ../../packages/my packages

您可以强制使用符号链接,而不是默认的回退策略 “symlink”:true或使用“symlink”:false选项进行镜像。强迫 在部署或从中生成包时,镜像非常有用 整体存储库

这个选择对我来说是最有意义的,也是我个人的选择

2.多个编写器使用环境变量配置 另一个选项是使用
COMPOSER
环境变量。这将允许您加载与默认命名文件不同的
composer.json
文件。因此,您可能有两个文件,根据环境变量的设置,它将加载相应的文件并创建匹配的锁定文件:

  • composer.json
  • composer-dev.json
好吧,那你到底为什么要这么做?由于您尝试在本地(使用活动符号链接)处理包的方式,但不希望在生产中发生这种情况,如果第一个选项不起作用,这可能会起作用

我应该注意到,您的目标应该始终是拥有一个跨环境(即本地、暂存、生产)工作相同的配置。我知道你想在应用程序中立即看到对存储库的本地更改,而每次更改都要经历提交/推送/拉取过程是荒谬的


其他阅读/资源:

composer update acme/ourpackage--lock说:“无需安装或更新”,并且.lock文件没有更新。将其作为路径而不是存储库添加:感谢您的回答,但我不知道在部署到服务器时该如何工作。当composer不知道git存储库在哪里时,如何安装软件包?@jrewing您能解决这个问题吗?我的回答有什么帮助吗?谢谢你的回答,我很快就会查出来,我可能和你在不同的时区:)我想两者结合可能会有用。因为如果我只使用路径,部署(composer安装)将无法在生产服务器上工作。但如果我在本地(在另一个composer.json中)使用路径,并在其他任何地方使用存储库,它可能会工作