资讯专栏INFORMATION COLUMN

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

EasonTyler / 1072人阅读

摘要:系统学习的使用请移步中文学习开发自己的组件要点理解如何实现自动加载第三方组件理解和的规范理解基于如何实现自动加载。

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 init

  Welcome to the Composer config generator

This command will guide you through creating your composer.json config.

Package name (/) [lingan/try-make-package]:
Description []: try make a package
Author [saboran , n to skip]:
Minimum Stability []: dev
Package Type (e.g. library, project, metapackage, composer-plugin) []: library
License []: MIT

Define 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": {
      "FlowerRose": "src/Flower/Rose",
      "FlowerLily": "src/Flower/Lily"
    }
  }
}
创建类文件

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

对应文件内容



测试安装

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

 array($baseDir . "/src/Flower/Rose"),
    "FlowerLily" => 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

 array($vendorDir . "/lingan/try-make-package/src/Flower/Rose"),
    "FlowerLily" => array($vendorDir . "/lingan/try-make-package/src/Flower/Lily"),
);

新建首页入口文件index.php,开始测试自己写的包

desc();
echo "
";
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服务钩,以便在您推送时更新!)

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

简化步骤如下:

去个人中心页面拿到自己的api令牌

去当前包在GitHub的地址,点击设置,点击集成和服务,点击添加Packagist服务并配置你的API令牌,以及你的Packagist用户名和账号对应域名

选择active,点击add service

设置自动更新结束,之后你更改了自己包扩展的代码提交到GitHub后,很短的时间差就会同步到Packagist

结束语

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

Happy Coding

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/26031.html

相关文章

  • php管理依赖关系工具composer学习笔记

    摘要:首先支持下黄老师的视频网站转型这篇的学习笔记也是根据他的视频教程写的,一共十集,讲解的很简单感兴趣的同志们可以上他视频网站购买视频,网站地址放在文末我的博客作用自动安装所需要的模块,自动加载管理项目,发布到网上上去是默认的加载组件地址安装下 首先支持下黄老师的视频网站转型这篇composer的学习笔记也是根据他的视频教程写的,一共十集,讲解的很简单感兴趣的同志们可以上他视频网站购买视频...

    CoyPan 评论0 收藏0
  • PHP回顾之创建自己Composer

    摘要:想要更好的利用协同工作,学会创建自己的包是一项必不可少的技能。编辑项目的或,增加一项配置,例如以上配置使用中国全量镜像网站作为默认中央仓库。创建自己的包创建一个包只需两步填写包描述信息写代码。通过简单两步,我们创建的自己的包。 转载请注明文章出处:https://tlanyan.me/php-review... PHP回顾系列目录 PHP基础 web请求 cookie web响应 ...

    KoreyLee 评论0 收藏0
  • 月光宝盒之网站资源收录

    摘要:开源的论坛网站开源的论坛源代码接口管理接口环境下环境一键安装软件二前端资源中国淘宝镜像在国内,由于墙的原因,安装包速度很慢,所以,这里建议使用淘宝提供的镜像安装前端资源。 为者常成,行者常至。 一、PHP资料 1、V2EX way to explore 分享和探索的地方2、Laravel China 中国最大的 Laravel 和 PHP 开发者社区3、Composer使用方法4、Pa...

    learning 评论0 收藏0
  • 月光宝盒之网站资源收录

    摘要:开源的论坛网站开源的论坛源代码接口管理接口环境下环境一键安装软件二前端资源中国淘宝镜像在国内,由于墙的原因,安装包速度很慢,所以,这里建议使用淘宝提供的镜像安装前端资源。 为者常成,行者常至。 一、PHP资料 1、V2EX way to explore 分享和探索的地方2、Laravel China 中国最大的 Laravel 和 PHP 开发者社区3、Composer使用方法4、Pa...

    2bdenny 评论0 收藏0

发表评论

0条评论

EasonTyler

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<