当前位置: 首页 > 知识库问答 >
问题:

我应该把作曲家。是否在库的版本控制下锁定?[副本]

左丘宜然
2023-03-14

在回答如何在我的私有存储库中获得包含的包的确切版本时,我声明不应该将composer.lock置于包的版本控制之下。安装包的时候,这个文件终究是不用的。

我浏览了一组流行的存储库,其中大多数不包含锁文件(如Symfony、Laravel、Guzzle、Monolog)。另一方面,条令存储库包含该文件,我想知道是否有充分的理由这样做,或者省略该文件。

附带说明:这是关于包,库,不管你想怎么称呼它们。对于应用程序,这是另一回事,因为当在团队中一起工作或部署到其他系统时,您希望坚持每个依赖项的特定版本。如何处理这种不同的情况包含在composer.lock应该致力于版本控制吗?中,但它不包含我的用例的太多参数

共有2个答案

蒋啸
2023-03-14

我的文章不是关于纯库的,而是一种对其他库有很多依赖关系的模块。该模块是各种应用程序的一部分。例如,如果我在没有composer的情况下运行composer安装。在部署我的应用程序时,我可能会推出我没有测试过的支架。因此,我修复了模块版本对具体状态的依赖关系,当然还提交了编写器。锁因此,在我看来,与Symfony这样的框架相比有点滞后,因为这里没有部署任何东西。

艾跃
2023-03-14

由于文件在安装包时没有以任何有用的方式使用,因此作为库本身对最终用户的功能,它至少与库的用户无关。

然后,推理就变成了拥有执行开发任务所需的一组锁定的依赖项对库的开发人员是否有用,例如测试框架的特定版本等。在这些情况下,参数可能是编写器。json文件与常规应用程序中的作用相同——它将依赖项锁定到我们知道可以工作的依赖项。

然而,这里有一个警告——在开发库时,您确实希望用例与库用户安装时的体验相同。考虑到这一点,在composer中锁定显式版本通常更有意义。json而不是依赖锁文件来提供相同的功能。这使得任何CI解决方案在运行测试时都能安装正确的依赖项集(与用户将获得的依赖项集相同)。但是,您可以让该进程在运行测试之前在本地更新锁文件,以拥有多个测试用例—一个具有锁定的依赖项,另一个具有最新版本(用户将获得)。

Doctrine决定提交锁文件是出于他们自己的原因,这是完全有效的——实际上,他们可以归结为用于开发工作流的工具:

所有条令项目都必须提交编写器。锁定文件。像phpstanphpcs这样的工具在补丁发布时非常脆弱,我们不希望在没有对自己的代码进行任何更改的情况下构建开始失败。每当需要升级依赖项时,composer。锁定文件应在本地更新,并通过pull请求提交更改。

这两种情况都可以进行论证;这将取决于项目本身及其开发人员的偏好。我倾向于不提交,因为这更接近于复制用户在安装库时的体验。但是,每个开发人员仍然会有本地锁文件,这意味着每个开发人员在开发库时在自己的计算机上拥有的内容可能会有所不同。提交锁文件将使所有开发人员都能更全面地使用锁文件,但需要格外小心,才能为用户复制体验(然后,我们又回到了最初的论点……)。

 类似资料:
  • 我正在使用laravel框架,并使用composer安装特定版本的软件包,但我收到一个错误表单composer,如下所示 我怎样才能解决这个问题? 我正在使用MacOS

  • 我应该在git和GitHub这样的远程版本控件中提交我的idea文件夹吗?这是一个好的做法吗?

  • 我把我的laravel项目上传到一个需要PHP7及以上版本的子域上。我已经更新了子域以使用PHP7。但是,当运行

  • 问题内容: 我是否应该将项目文件(如Eclipse的.project,.classpath,.settings)置于版本控制下(例如Subversion,GitHub,CVS,Mercurial等)? 问题答案: 您确实希望保持任何可移植设置文件的版本控制, 这意味着: 其中没有绝对路径的任何文件。 包括: 我的经验法则: 您必须能够将项目加载到工作区中,并具有在IDE中正确设置它并在几分钟之内进

  • 通常情况下请不要这样做, vendor 文件夹(或者其它你依赖包所安装的位置)应该被加入 .gitignore/svn:ignore/...... 最好的方式是让所有开发人员使用 Composer 命令来安装依赖,同样的,构建服务器,部署工具等,需要将运行 Composer 纳入工程引导的一部分。 尽管在某些情况下将其提交到版本库挺让吸引人的,但其容易带来下面几个问题: 当你更新代码时,版本控制仓

  • 我试图创建一个自定义供应商包,但还没有把包打包。根据文档,包可以从git(vcs)而不是Packagist加载:https://getcomposer.org/doc/05-repositories.md#loading-a-package-from-a-vcs-repository yii2项目(虽然不认为框架问题)我已经在供应商文件夹中创建了包: foundationize/yii2 foun