composer是Composer不是包管理器。是的,它涉及“包”和“库”,但它是在每个项目的基础上进行管理的,安装在项目的某个目录中(例如供应商)。默认情况下它不会全局安装任何东西。所以这只是一个依赖管理。Composer深受node的npm和ruby??的bundler的启发。当时PHP下还没有类似的工具。Composer可以做什么Composer会像这样为您解决问题:您有一个项目依赖于多个库。其中一些库依赖于其他库。你声明你所依赖的。Composer将确定需要安装哪些版本的包,并安装它们(将它们下载到您的项目中)。系统学习composer的使用,请移步composer中文学习和开发自己的composer组件。要点:了解composer如何自动加载第三方组件;了解psr-0和psr-4的规格;了解基于psr-0、psr-4、classmap,如何实现文件的自动加载。了解Composer和Packagist关于安装和使用composer,请参考composer中文学习创建目录名mkdirtry-make-packagecdtry-make-package这个try-make-package文件夹就是你包的根目录,你只要需要记住Composer.json在包的哪个目录下,一般是包的根目录。现在我们没有composer.json文件,让我们初始化扩展包[lingan/try-make-package]:Description[]:trymakeapackageAuthor[saboran,ntoskip]:MinimumStability[]:devPackage类型(例如库、项目、metapackage、composer-plugin)[]:libraryLicense[]:MIT定义你的依赖。你想以交互方式定义你的依赖关系(需要)吗[是]?n您是否愿意以交互方式定义您的开发依赖项(require-dev)[是]?n{"name":"lingan/try-make-package","description":"trymakeapackage","type":"library","license":"MIT","authors":[{"name":"saboran","email":"saboran@163.com"}],"minimum-stability":"dev","require":{}}你确认生成了吗[是]?是的Compo已生成ser.json文件,我们对这个文件做一些修改,修改composer.json增加自动加载规范(命名空间和目录映射关系)和环境要求{"name":"lingan/try-make-package","description":"尝试制作一个包","type":"library","license":"MIT","authors":[{"name":"saboran","email":"saboran@163.com"}],"最低稳定性":"dev","require":{"php":">=7.0"},"autoload":{"psr-4":{"Flower\\Rose\\":"src/Flower/Rose","Flower\\Lily\\":"src/Flower/Lily"}}}创建class文件根据上面命名空间和目录的映射关系,创建对应的目录和文件,如下图Contentarray($baseDir.'/src/Flower/Rose'),'Flower\\Lily\\'=>array($baseDir.'/src/Flower/Lily'),);添加.gitignore为git忽略一些文件,添加readme.md为项目添加描述。ideavendor/composer.lock将代码提交到github现在在自己的Github主页新建一个仓库,将项目提交到对应的仓库,参考如下:gitinitgitadd-Agitcommit-am"init&&devpackage"gitremoteaddorigingit@github.com:linganmin/try-make-package.gitgitpush-uoriginmaster登录自己的packagist提交(注册自己)并发送给自己粘贴项目的地址,点击check,然后点击提交。至此,你自己的composer包已经提交成功。测试使用自己开发的包扩展【2017.11.07更新】创建测试目录mkdirtest-my-packagecdtest-my-packageinstallation自己的扩展composerrequirelingan/try-make-packagedev-master./composer.json已更新加载带有包信息的作曲家存储库更新依赖项(包括require-dev)包操作:1次安装,0次更新,0次删除-安装linglingan/try-make-package(dev-masterd7b9f94):Cloningd7b9f941b0fromcache写入锁文件生成自动加载文件安装后的目录如下图所示。参见autoload_psr4.phparray($vendorDir.'/lingan/try-make-package/src/Flower/Rose'),'Flower\\Lily\\'=>array($vendorDir.'/lingan/try-make-package/src/Flower/百合'),);新建一个首页入口文件index.php,开始测试你写的包desc();执行phpindex.phpthisisroseflowerthisislilyflower%*至此,说明我们开发的扩展包可以正常使用了。设置Packagist自动更新扩展包,即当我们更新扩展包并提交到GitHub时,Packagist会自动更新,没有设置自动更新时,Packagist上的包详情页会有这样的提示这个包不会自动更新.请为Packagist设置GitHub服务挂钩,以便它在您推送时得到更新!(此包不会自动更新文档地址简化步骤如下:进入个人中心页面获取自己的apitoken,进入GitHub中当前包地址,点击设置,点击集成和服务,点击AddPackagistService配置你的APItoken,你的Packagist用户域名和域名对应的账号选择active,点击addservice设置自动更新结束,修改自己的包扩展代码后并提交到GitHub,会在短时差内同步到Packagist,尝试接触更多新技术和工具,以上文字如有错误,欢迎指正HappyCoding