composer是什么

Composer 不是一个包管理器。是的,它涉及 "packages" 和 "libraries",但它在每个项目的基础上进行管理,在你项目的某个目录中(例如 vendor)进行安装。默认情况下它不会在全局安装任何东西。因此,这仅仅是一个依赖管理。

Composer 受到了 node's npm 和 ruby's bundler 的强烈启发。而当时 PHP 下并没有类似的工具。

composer可以做什么

Composer 将这样为你解决问题:

  • 你有一个项目依赖于若干个库。
  • 其中一些库依赖于其他库。
  • 你声明你所依赖的东西。
  • Composer 会找出哪个版本的包需要安装,并安装它们(将它们下载到你的项目中)。

系统学习composer的使用请移步 composer中文学习

开发自己的composer组件

要点:理解composer如何实现自动加载第三方组件; 理解psr-0psr-4的规范; 理解基于psr-0,psr-4,classmap,files如何实现自动加载。 理解Composer和Packagist

关于安装和使用composer请参考composer中文学习

创建目录名称

mkdir try-make-package
cd try-make-package

这个try-make-package文件夹就是你的包的根目录了,你只需要记住composer.json在包的哪个目录下面,一般那就是包的根目录了。
现在我们还没有composer.json文件,下面我们来初始化

初始化扩展包

☁  composer initWelcome to the Composer config generatorThis command will guide you through creating your composer.json config.Package name (<vendor>/<name>) [lingan/try-make-package]:
Description []: try make a package
Author [saboran <saboran@163.com>, n to skip]:
Minimum Stability []: dev
Package Type (e.g. library, project, metapackage, composer-plugin) []: library
License []: MITDefine your dependencies.Would you like to define your dependencies (require) interactively [yes]? n
Would you like to define your dev dependencies (require-dev) interactively [yes]? n{"name": "lingan/try-make-package","description": "try make a package","type": "library","license": "MIT","authors": [{"name": "saboran","email": "saboran@163.com"}],"minimum-stability": "dev","require": {}
}Do you confirm generation [yes]? yes

经过一番上面的挣扎在当前目录就生成了composer.json文件,下面我们对这个文件进行一些修改

修改composer.json增加自动加载规范(命名空间和目录映射关系)和环境要求

{"name": "lingan/try-make-package","description": "try make a package","type": "library","license": "MIT","authors": [{"name": "saboran","email": "saboran@163.com"}],"minimum-stability": "dev","require": {"php": ">=7.0"},"autoload": {"psr-4": {"Flower\\Rose\\": "src/Flower/Rose","Flower\\Lily\\": "src/Flower/Lily"}}
}

创建类文件

根据上面的命名空间和目录的映射关系,创建对应目录和文件,如下图

对应文件内容

<?php
/*** Created by PhpStorm.* User: Lingan* Date: 2017/11/6* Time: 21:39*/namespace Flower\Rose;class Rose
{public function desc(){echo "this is rose flower";}
}
<?php
/*** Created by PhpStorm.* User: Lingan* Date: 2017/11/6* Time: 21:38*/namespace Flower\Lily;class Lily
{public function desc(){echo "this is lily flower";}
}

测试安装

以上代码都梳理完毕后,需要composer install来测试我们的包是否可以正常工作此时会在vendor/composer/autoload_psr4.php中生成命名空间和目录的映射关系,被包在一个数组中:

<?php// autoload_psr4.php @generated by Composer$vendorDir = dirname(dirname(__FILE__));
$baseDir = dirname($vendorDir);return array('Flower\\Rose\\' => array($baseDir . '/src/Flower/Rose'),'Flower\\Lily\\' => array($baseDir . '/src/Flower/Lily'),
);

增加.gitignore为git忽略一些文件,增加readme.md为项目增加描述

.idea
vendor/
composer.lock

提交代码到github

现在自己的Github主页上创建一个新的仓库然后将项目提交到对应仓库,参考如下

git init
git add -A
git commit -am "init && dev package"
git remote add origin git@github.com:linganmin/try-make-package.git
git push -u origin master

登录自己的packagist submit(自己注册)

将自己的项目地址粘贴

点击check,然后点击submit,至此,自己的composer包就提交成功了,

测试使用自己开发的包扩展[2017.11.07更新]

  • 创建测试目录
mkdir test-my-package
cd test-my-package
  • 安装自己的扩展
 composer require lingan/try-make-package dev-master
./composer.json has been updated
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 1 install, 0 updates, 0 removals- Installing lingan/try-make-package (dev-master d7b9f94): Cloning d7b9f941b0 from cache
Writing lock file
Generating autoload files
  • 安装完成的目录如下图
  • 查看autoload_psr4.php
<?php// autoload_psr4.php @generated by Composer$vendorDir = dirname(dirname(__FILE__));
$baseDir = dirname($vendorDir);return array('Flower\\Rose\\' => array($vendorDir . '/lingan/try-make-package/src/Flower/Rose'),'Flower\\Lily\\' => array($vendorDir . '/lingan/try-make-package/src/Flower/Lily'),
);
  • 新建首页入口文件index.php,开始测试自己写的包
<?php
/*** Created by PhpStorm.* User: Lingan* Date: 2017/11/7* Time: 11:04*/
require_once './vendor/autoload.php'; // 加载自动加载文件use Flower\Rose\Rose;
use Flower\Lily\Lily;$rose = new Rose();
$lily = new Lily();echo $rose->desc();
echo "\n";
echo $lily->desc();
  • 执行
php index.php
this is rose flower
this is lily flower%    

* 至此说明我们自己开发的扩展包可以正常使用

设置Packagist上自动更新扩展包,即当我们更新扩展包提交到GitHub时,Packagist自动更新

在没有设置自动更新时,Packagist上包详情页会有这样一个提示

This package is not auto-updated. Please set up the GitHub Service Hook for Packagist so that it gets updated whenever you push!(这个软件包不是自动更新的。请为Packagist 设置GitHub服务钩,以便在您推送时更新!)

详细设置自动更新软件包的文档地址

简化步骤如下:

  1. 去个人中心页面拿到自己的api令牌
  2. 去当前包在GitHub的地址,点击设置,点击集成和服务,点击添加Packagist服务并配置你的API令牌,以及你的Packagist用户名和账号对应域名
  3. 选择active,点击add service
  4. 设置自动更新结束,之后你更改了自己包扩展的代码提交到GitHub后,很短的时间差就会同步到Packagist

结束语

作为一枚渣渣,发现自己的不足,尝试接触更多新技术和工具,以上文字若有错误欢迎指正

Happy Coding

学习开发自己的composer包,并使用GitHub实时更新到Packagist相关推荐

  1. php开发自己的composer包

    php开发自己的composer包: 前提需要安装composer 网站:https://packagist.org/ 可能需要梯子访问 开发是最好先注册一下 第一步创建插件: 当想要初始化一个php ...

  2. ios开发,将子线程获取的数据实时更新到UI

    多线程编程中普遍遵循一个原则,就是一切与UI相关的操作都有主线程做,子线程只负责事务,数据方面的处理. 所以不能直接在子线程中调用主线程的类的更新UI的方法,这样看不到任何结果. 而是需要有个缓冲,切 ...

  3. 动手开发自己的第一个 composer 包

    原文:http://blog.jayxhj.com/2016/05/basic-composer-package-development/ composer 是 PHP 的依赖管理工具,本篇文章就来说 ...

  4. 开发composer包

    一.初始化(生成composer.json文件) composer init #输入你要创建的composer包项目命名空间 Package name (<vendor>/<name ...

  5. 使用 satis 搭建一个私有的 Composer 包仓库 在我们的日常php开发中可能需要使用大量的composer包,大部份都可以直接使用,但在公司内部总有一小部份包是不能公开的,这时候我们就需

    使用 satis 搭建一个私有的 Composer 包仓库 在我们的日常php开发中可能需要使用大量的composer包,大部份都可以直接使用,但在公司内部总有一小部份包是不能公开的,这时候我们就需要 ...

  6. Uber开源TensorFlow框架工具箱Ludwig,无需编码即可进行深度学习开发

    日前,网约车服务商 Uber 开源并发布了它们开发的 Ludwig,这是一款基于 Google TensorFlow 框架上的开源工具箱.藉由 Ludwig,用户无需再编写任何代码即可进行深度学习的开 ...

  7. php 的包管理,php composer包管理器

    Composer是 PHP 用来管理依赖(dependency)关系的工具.你可以在自己的项目中声明所依赖的外部工具库(libraries),Composer 会帮你安装这些依赖的库文件. 下载地址: ...

  8. 深度学习开发环境调查结果公布,你的配置是这样吗?(附新环境配置) By 李泽南2017年6月26日 15:57 本周一(6 月 19 日)机器之心发表文章《我的深度学习开发环境详解:Te

    深度学习开发环境调查结果公布,你的配置是这样吗?(附新环境配置) 机器之心 2017-06-25 12:27 阅读:108 摘要:参与:李泽南.李亚洲本周一(6月19日)机器之心发表文章<我的深 ...

  9. 基于Anaconda安装GPU版PyTorch深度学习开发环境

    基于Anaconda安装GPU版PyTorch深度学习开发环境 1 安装Anaconda 2 安装GPU计算驱动 2.1 检查是否有合适的GPU 2.2 下载CUDA和cuDNN 2.3 安装CUDA ...

最新文章

  1. 使用command对象操作数据库
  2. 上天探索脉冲星,下海保护白海豚,腾讯这个AI团队,今年真的有点忙
  3. 重磅消息:Redis 6.0.0 稳定版发布
  4. COSCon’20开源教育论坛介绍
  5. win10无法装载iso文件_win10镜像文件不能安装怎么办?win10镜像文件无法安装的解决教程...
  6. VerbalExpressions
  7. redission分布式锁测试代码
  8. 飘刃 v0.0.10 首次发布,超快执行速度的 Vue 项目构建工具
  9. Mysql数据库读写分离的实现
  10. 特技替身拜拜,迪士尼机器超人要上天了!
  11. 设置删除命令别名--用Enki学Linux系列(10)
  12. 剪不断,理不乱——Javascript,JQuery,AJAX
  13. github上Android开源项目汇总(带效果图)
  14. CSS基础笔记(多看多记冲冲冲)
  15. 高新技术企业认证的好处
  16. 基于元胞自动机的人员疏散模拟器研究(Matlab代码实现)
  17. flex/air 护眼健康卫士(源码/air安装包)
  18. 单片机PWM舵机控制
  19. 系统集成项目管理工程师(软考中级)怎么备考?
  20. WordPress版微信小程序3.1.5版的新功能

热门文章

  1. UA MATH564 概率论 标准二元正态分布的性质
  2. 初步了解qemu虚拟机
  3. Hyper-V安装ReactOS未成功
  4. websocket探究
  5. Linux操作_常用命令操作练习
  6. stdafx.h的作用以及原理
  7. TreeView和DataGridView控件组合使用
  8. 利用partial快乐驱动开发
  9. [转]深入理解 __doPostBack
  10. python判断哪个数最小_怎么用python比较三个数大小