我有点搞不懂作曲家这个词。在具有存储库的应用程序中使用的锁。
我看到很多人说我们不应该。从存储库锁定。
如果我在开发环境中更新我的库,我将有一个新的作曲家。锁,但我将无法更新到生产,是吗?
它不会在这个文件上产生冲突吗?
我有点搞不懂作曲家这个词。在具有存储库的应用程序中使用的锁。
我看到很多人说我们不应该。从存储库锁定。
如果我在开发环境中更新我的库,我将有一个新的作曲家。锁,但我将无法更新到生产,是吗?
它不会在这个文件上产生冲突吗?
当前回答
这一点在这里已经得到了充分的回答。
博士TL;
当然,你应该vc这个composer.lock
但我要告诉你的是为什么
作曲家。json的作用
作曲家。Json是PHP包的依赖项清单的入口点。
它已经规定包开发人员遵循语义版本控制。
因此,通过这种方式,如果X.Y.Z中的API版本(x)发生了更改,您将明白有一些事情需要注意,否则您可以将您的版本锁定到某个“~x”版本。
并非所有包都遵循semversion
但是,有很多包没有遵循规则(5.3和5.4 api级别改变或破坏):
不尊重semversioning原则(api级别更改) 新的包与旧的API不兼容(没有经过很好的测试和损坏)
解决方案composer.lock
作曲家想出了一个解决办法。另一个用于锁定包版本的文件。(composer.lock)
它保存了确切的包版本,因此如果任何人想拥有相同的依赖版本,都可以从它中受益。
在所有部署之间保持清单相同
值得一提的是,现代web开发原则的12个因素之一是在所有部署中保持依赖关系相同,这样每个部署都可以测试它。 它们之间没有收缩。
:
你必须留下作曲者。在版本控制下锁定
在生产方面:
composer install --no-dev
从vc控制的锁文件中安装所有东西。 你之前已经完全测试过了。
作曲家的最终用户。Json & composer.lock
作曲家。Json是开发人员总结deps和版本的精简文件。
而作曲家。Lock被部署程序(机器)用于在部署程序上安装准确的版本号。
类比
这就像IP和域名的类比:
供机器使用的IP(锁文件)
打算由人类使用的域(json)
然而,人(开发人员)和机器(部署人员)都可以从两者中读取并受益,但两者都有更可取的版本。
其他回答
是的很明显。
这是因为本地安装的编写器将优先选择编写器。在composer.json上锁定文件。
如果锁文件在vcs中不可用,composer将指向composer。Json文件来安装最新的依赖项或版本。
文件编写器。Lock更深入地维护依赖关系,即它指向我们软件中包含的包版本的实际提交,因此这是最重要的文件之一,它更精细地处理依赖关系。
在以两种方式做了几个项目后,我的立场是作曲家。Lock不应该作为项目的一部分提交。
作曲家。Lock是构建元数据,不是项目的一部分。依赖关系的状态应该通过您如何控制它们(手动或作为自动构建过程的一部分)来控制,而不是由上一个开发人员任意更新它们并提交锁文件。
如果你担心在编写器更新之间依赖关系的变化,那么你对自己的版本控制方案缺乏信心。版本(1.0、1.1、1.2等)应该是不可变的,你应该避免在初始特性开发之外使用“dev-”和“x *”通配符。
提交锁文件是依赖项管理系统的回归,因为依赖项版本现在已经回到隐式定义的状态。
此外,你的项目永远不应该在每个环境中重新构建或重新获取其依赖项,尤其是prodd。你的交付品(tar, zip, phar,一个目录等)应该是不可变的,并在环境中进行推广而不需要更改。
如果你担心你的代码被破坏,你应该提交编写器。锁定您的版本控制系统,以确保所有项目合作者使用相同版本的代码。如果没有锁定文件,您每次都会得到新的第三方代码。
例外情况是当你使用元应用程序时,需要在安装时更新依赖关系的库(如Zend Framework 2 Skeleton应用程序)。因此,目标是在每次开始开发时获取最新的依赖项。
来源:作曲者:It’s All About the Lock File
请参见:编写器更新和安装之间的区别是什么?
这一点在这里已经得到了充分的回答。
博士TL;
当然,你应该vc这个composer.lock
但我要告诉你的是为什么
作曲家。json的作用
作曲家。Json是PHP包的依赖项清单的入口点。
它已经规定包开发人员遵循语义版本控制。
因此,通过这种方式,如果X.Y.Z中的API版本(x)发生了更改,您将明白有一些事情需要注意,否则您可以将您的版本锁定到某个“~x”版本。
并非所有包都遵循semversion
但是,有很多包没有遵循规则(5.3和5.4 api级别改变或破坏):
不尊重semversioning原则(api级别更改) 新的包与旧的API不兼容(没有经过很好的测试和损坏)
解决方案composer.lock
作曲家想出了一个解决办法。另一个用于锁定包版本的文件。(composer.lock)
它保存了确切的包版本,因此如果任何人想拥有相同的依赖版本,都可以从它中受益。
在所有部署之间保持清单相同
值得一提的是,现代web开发原则的12个因素之一是在所有部署中保持依赖关系相同,这样每个部署都可以测试它。 它们之间没有收缩。
:
你必须留下作曲者。在版本控制下锁定
在生产方面:
composer install --no-dev
从vc控制的锁文件中安装所有东西。 你之前已经完全测试过了。
作曲家的最终用户。Json & composer.lock
作曲家。Json是开发人员总结deps和版本的精简文件。
而作曲家。Lock被部署程序(机器)用于在部署程序上安装准确的版本号。
类比
这就像IP和域名的类比:
供机器使用的IP(锁文件)
打算由人类使用的域(json)
然而,人(开发人员)和机器(部署人员)都可以从两者中读取并受益,但两者都有更可取的版本。
如果你更新了你的库,你也想提交锁文件。它基本上说明您的项目被锁定到您正在使用的库的特定版本。
如果您提交了更改,并且有人提取了您的代码并更新了依赖项,那么锁文件应该是未修改的。如果它被修改了,这意味着您有了某个东西的新版本。
在存储库中使用它可以确保每个开发人员使用相同的版本。