我最近为websockets下载了一个新的symfony2包,并将其包含在我的composer文件中, 当我打电话时
php composer.phar update
它自动更新了我的Symfony版本,我想知道从长远来看更新Symfony2是否会破坏网站,因为部分源代码可能会过时(已弃用)
答案 0 :(得分:1)
是的,如果作曲家下载的版本的依赖项与您用于开发网站的版本不向后兼容,那么事情可能/将会中断。
但是,您可以通过在composer.json
中定义好规则来限制可能性。
首先,如果您还没有听说过,semantic versioning可能会很有用。许多项目遵循语义版本控制规则,基本上说明如果项目/库以与早期版本不兼容的方式发生变化,则应增加其主版本号。例如,如果1.5.x具有某个功能,并且在更改或不再提供该功能的情况下进行更新,则新版本号应为2.0.x而不是1.6.x。
了解这一点,您可以使用Composer's tilde operator(~
)来定义有用的版本约束。例如,要将依赖项添加到symfony的文件中,可以将以下要求添加到composer.json中:
"symfony/symfony": "~2.3"
相当于:
"symfony/symfony": ">=2.3,<3.0"
或者,用简单的英语:&#39;给我一个版本symfony/symfony
,至少2.3或更高版本,但低于3.0&#39;。如果Symfony正确地遵循语义版本控制,则不应该在任何2.x版本中进行向后不兼容的更改(并且,如果进行任何向后不兼容的更改,它们应该带有版本3.0),所以你应该没问题。
答案 1 :(得分:0)
这实际上取决于composer.json
的配置方式。如果您的依赖项使用SemVer,并且您在composer.json
中引用它们只允许修补程序版本更改(例如"package-name": "1.1.x"
),那么一切都应该没问题。
另请注意,您可以将包名称作为参数传递给composer update
命令,例如php composer.phar update <vendor/dependency-name>
。这将告诉Composer仅检查<dependency-name>
包可用的更新,并考虑到您当前的composer.json
版本限制。
如果您想要检查更新后没有任何内容被破坏,并且您没有将更新范围保持为我指定的范围,那么可能会中断。检测和避免这种情况的最佳方法是通过测试。
答案 2 :(得分:0)
您应该阅读composer.lock
file。这将确保Composer不会更新任何版本的存储库,也不会更新您在锁定文件中指定的内容