Cho*_*per 19 php symfony composer-php
在Symfony 2文档中,它说:
捆绑包不应嵌入用JavaScript,CSS或任何其他语言编写的第三方库.
那我该怎么做?我想使用Composer安装Twitter Bootstrap,DataTables和许多其他东西作为依赖项.但我能想到的唯一方法是创建一个包并嵌入它们.
这样做的正确方法是什么?
编辑:截至目前,JS库的包管理器非常好,如Bower,Jam或Component.
语义版本控制 - Composer建议使用语义版本控制系统.它使用XYZ设置,其中X是主要版本,Y是次要版本,Z是补丁版本.Y和Z应始终向后兼容,而X反映代码的变化,MIGHT向后兼容.
嵌入应该被视为复制并粘贴代码(和二进制)作为库的一部分,而不是将其作为第三方(供应商)包/包.它包括在资源文件夹中包含query.js或将推进代码复制并粘贴到包内的文件夹中.
为什么不嵌入第三方库
捆绑包不应嵌入用JavaScript,CSS或任何其他语言编写的第三方库.
本声明来自最佳实践观点.嵌入(如复制/粘贴)任何类型的第三方库(特别是PHP库)通常不是一个好主意.例如,假设BUNDLE A使用LIBRARY FOO v1.4.1,BUNDLE B也使用LIBRARY FOO但使用不同版本v1.5.2.如果任何BUNDLES(A或B)嵌入了FOO lib,它们可能(很可能会)变得不兼容.例如,php类和函数不能重新声明.当然,任何捆绑包都可以使用变通方法来缓解这个问题,例如命名它们的FOO版本或自动加载规则,但这会增加其他问题,除了肯定会增加内存使用量,因为有两个版本的同一个东西被解析通过PHP.
如果PHP包不遵循这个最佳实践,那么出现的错误通常很容易被发现(有错误:无法重新定位函数blablabla).但是,对于Javascript库,情况并非如此.您可以重新声明函数(因为它们是对象属性).因此,如果现在FOO是JS Lib,而BUNDLE A和B将它们嵌入到它们的库中,当它们被包含在内时,会出现奇怪的问题.例如,可以重新声明一个函数,该函数缺少其中一个包的关键功能并打破它.
它处理PHP库/包.Symfony建议要求库作为依赖而不是嵌入它,因为它使用Composer作为包管理器,它负责下载和加载require包.据我所知,当2个软件包/软件包使用相同的库时,如果它们具有不同的版本要求,则使用最实际的版本,除非它的向后不兼容.然后,Composer会报告您必须手动解决的冲突.
但是......没有办法正确处理JavaScript库.那是因为Composer是PHP库的包.您可以通过两种我能想到的方式来解决这个问题:(可能有更多更好的方法来解决这个问题,我只想到这两个,将它们作为建议阅读)
你必须记住:
由于编写器系统非常吸引人,特别是在将bundle/packages/library部署到其他人时,我使用第三方javascript/css库的方法是创建一个特定于JS/CSS 的依赖管理器,其他包/ bundle可以依赖它照顾他们的JS/CSS依赖关系而不用担心这个问题.
如果您计划向公众发布项目,即作为symfony包,您应该仔细计划如何处理这个问题.如果您的项目是自包含的(个人使用或客户端,而不是广泛使用),则由于您(程序员)完全控制您使用的第三方工具并将其包含在项目中,因此其相关性要低得多.这些只是避免未来问题的最佳实践"建议".