众所周知,Composer是PHP世界里最优秀的依赖管理工具之一。其带来了方便、高效、管理性三位一体的好处。但是Composer能做的事情远不止于此,今天我们聊一聊Composer如何使用Zip包来管理依赖。
在使用Composer处理依赖时,我们通常使用packagist等渠道获取安装包,但是在一些特殊情况下,我们需要使用Zip包来管理依赖。比如在公司内网环境下,无法访问互联网,而我们需要依赖于某个第三方库。这个时候我们可以使用Zip包的方式进行管理。
Composer是如何使用Zip包呢?假设我们需要使用一个第三方库,但是其没有提供安装包,我们需要自行下载源码再进行打包。打包出的文件如下所示:
foo-1.0.0/ |-- README.md |-- src/ |-- Foo.php |-- tests/ |-- FooTest.php |-- composer.json |-- composer.lock一般情况下,我们需要使用composer.json来描述这个包的依赖关系,但是在这种情况下,我们需要先解压这个Zip包并将其重命名为foo-1.0.0(与原Zip包名一致),然后在composer.json文件中使用本地路径引用这个包:
"repositories": [ { "type": "path", "url": "./foo-1.0.0" } ], "require": { "foo/foo": "1.0.*" }使用path类型的repositories指向本地文件夹,即这个打包好的文件夹;引用时键名为包名,值为版本号。此时在composer install时,Composer将会自动从本地文件夹安装这个库。 值得注意的是,需要将这个库打成符合Packagist规范的目录结构和文件名。如果您已经有了composer.json,则您可以在打包之前将其放入源码根目录下。Composer在识别到这个composer.json文件时,会将其优先考虑。 此外,如果您想将Zip包发布到Packagist上,其命名规范也是有严格要求的。通常情况下,包名应该为“vendor/package”,Zip包名应为“package-version.zip”。 总结一下,使用Zip包管理依赖,一般需要将其打包成符合Packagist规范的目录结构和文件名。然后使用path类型的repositories指向本地文件夹,在composer.json文件中使用本地路径引用这个包。最后,在composer install时,Composer将自动从本地文件夹安装这个库。在这种情况下,我们可以依然享受到Composer带来的依赖管理好处,提高生产力的同时,也能满足一些特殊情况下的需要。