1年前 158 0 0

首先让我们踏着欢快的脚步去Github创建一个新库这里取名 composer-car又欢快的将它克隆到本地

git clone https://github.com/GeHou/composer-car.git
cd composer-car

这个composer-car文件夹就是你的包的root目录了你只需要记住composer.json在包的哪个目录下面一般那就是包的root目录了。什么做包子的工作台这么理解呢也是可以的不过同学能先收收你的口水么。

现在我们还没有composer.json文件你可以根据composer文档生成并编辑它当然composer贴心的为我们准备了命令行look

- > composer init
Welcome to the Composer config generator
This command will guide you through creating your composer.json config.
Package name (< vendor >/< name >) [hou/composer-car]: 这里填写< 包提供者 >/< 包名 >的信息
Description []: 包的描述
Author [GeHou < ***@gmail.com >]: 作者信息
Minimum Stability []: 最低稳定版本
License []: 授权协议
Define your dependencies.
  Would you like to define your dependencies (require) interactively [yes]? no
  Would you like to define your dev dependencies (require-dev) interactively [yes]? no
  {
  "name": "hou/composer-car",
  "description": "In order to study composer",
  "license": "MIT",
  "authors": [
  {
  "name": "GeHou",
  "email": "***@gmail.com"
  }
  ],
  "minimum-stability": "dev",
  "require": {
  }
  }
  Do you confirm generation [yes]? yes
  Would you like the vendor directory added to your .gitignore [yes]? yes
  虽然经过以上的一番挣扎生成了composer.json文件不过我们还得往里面加点东西。使用你熟悉的编辑器打开composer.json文件修改至如下
  {
  "name": "hou/composer-car",
  "description": "In order to study composer",
  "license": "MIT",
  "authors": [
  {
  "name": "GeHou",
  "email": "***@gmail.com"
  }
  ],
  "minimum-stability": "dev",
  "require": {
  "php": " >=5.3.0"
  },
  "autoload": {
  "psr-4": {
  "Ford\\Escape\\": "src/Ford/Escape",
  "Ford\\Fusion\\": "src/Ford/Fusion",
  "Ford\\Focus\\": "src/Ford/Focus",
  "Ford\\Fiesta\\": "src/Ford/Fiesta"
  }
  }
  }

  细心的小伙伴可能已经认出了福特的商标(Ford)这说明我们都是同道中人你一定也很喜欢汽车对吧对吧 :-)

  我们登陆一下福特的网站看看都有哪些热销车型嗯嗯分别有ESCAPE、FUSION、FOCUS、FIESTA中文名称分别是翼虎、蒙迪欧、福克斯、嘉年华嘉年华ST我的梦想啊 好了好了那位看官放下你手里的板砖我承认一说到汽车就会滔滔不绝下面我们把水分挤出去继续讲解。

  根据上面的命名空间和目录的映射关系包的结构现在应该是下面这个样子

composer-car
  - src
  - - Ford
  - - - Escape
  - - - - Escape2013.php
  - - - Fiesta
  - - - - Fiesta2013.php
  - - - Focus
  - - - - Focus2013.php
  - - - Fusion
  - - - - Fusion2013.php
  - .gitignore
  - composer.json
  - README.md

Escape2013.php:

< ?php
  namespace Ford\Escape;
  class Escape2013
  {
  public static function info()
  {
  echo "This is Ford Escape2013!< br / >";
  }
  }

Fiesta2013.php:

< ?php
  namespace Ford\Fiesta;
  class Fiesta2013
  {
  public static function info()
  {
  echo "This is Ford Fiesta2013!< br / >";
  }
  }

Focus2013.php:

< ?php
  namespace Ford\Focus;
  class Focus2013
  {
  public static function info()
  {
  echo "This is Ford Focus2013!< br / >";
  }
  }

Fusion2013.php:

< ?php
  namespace Ford\Fusion;
  class Fusion2013
  {
  public static function info()
  {
  echo "This is Ford Fusion2013!< br / >";
  }
  }

  以上都梳理完毕后需要安装composer来测试我们的包是否可以正常工作安装它很简单在包的root目录下install即可

  composer install

  闪过几行神秘的提示之后即安装完毕此时会在vendor/composer/autoload_psr4.php中生成命名空间和目录的映射关系被包在一个数组中

< ?php
  // autoload_psr4.php @generated by Composer
  $vendorDir = dirname(dirname(__FILE__));
  $baseDir = dirname($vendorDir);
  return array(
  'Ford\\Fusion\\' = > array($baseDir . '/src/Ford/Fusion'),
  'Ford\\Focus\\' = > array($baseDir . '/src/Ford/Focus'),
  'Ford\\Fiesta\\' = > array($baseDir . '/src/Ford/Fiesta'),
  'Ford\\Escape\\' = > array($baseDir . '/src/Ford/Escape'),
  );

  如果发布成packagist包然后进行安装的话到时候这里就不是$baseDir了而是$vendorDir。

  然后我们新建一个测试文件show.php用以下内容填充它

< ?php
  require 'vendor/autoload.php';
  use Ford\Escape as Escape;
  use Ford\Fiesta as Fiesta;
  use Ford\Focus as Focus;
  use Ford\Fusion as Fusion;
  echo Escape\Escape2013::info();
  echo Fiesta\Fiesta2013::info();
  echo Focus\Focus2013::info();
  echo Fusion\Fusion2013::info();

  打开浏览器敲入 http://foo.com/composer-car/show.php (foo.com是我的本地测试域名请替换成小伙伴自己的)。

  浏览器上依次输出了

This is Ford Escape2013!
This is Ford Fiesta2013!
This is Ford Focus2013!
This is Ford Fusion2013!

  是不是有点小激动呢别急别一副作鸟兽散的样子还有发布的流程呢不过你要是真的急着wc或者觉得教程too simple侯哥是不会让你捡肥皂的。

  首先作为调试代码的部分我们是不需要push到github上的所以将show.php打入冷宫编辑.gitignore文件在末尾加入show.php。这个时候有些小伙伴可能会疑惑了为什么上面还有个/vendor/记得我们init包的时候回答过一个问题么

Would you like the vendor directory added to your .gitignore [yes]? yes

嗯嗯你懂了吧

废话少说经过职业玩家的一番噼里啪啦的敲击之后代码被push到github上了噼里啪啦的内容如下

$ git status
  # On branch master
  # Untracked files:
  #   (use "git add < file >..." to include in what will be committed)
  #
  #   .gitignore
  #   composer.json
  #   src/
  nothing added to commit but untracked files present (use "git add" to track)
  $ git add .
  $ git commit -m "gogogo"
  $ git push

  接下来需要将github上的代码同步到https://packagist.org/ 上去[Packagist的网站](https://packagist.org/](https://packagist.org/) 注册一个账号(Login with github是个不错的选择)。登录然后点击的大大的绿色背景按钮 Submit a Package在 Repository URL (Git/Svn/Hg) 处输入包在github上的地址这里就是

  https://github.com/GeHou/composer-car

  now点击 Check如果一切顺利会返回项目的名称确认后点击 Submit 完成抓取操作。

  默认情况下Packagist是不会自动更新你在github上commit的代码的在刚才导入的项目页面中点击 Force Update Packagist会抓取github上对应库的内容进行更新但这还不是自动化的幸运的是我们可以在Github库的设置中进行配置来消除手动更新的麻烦。

  进入Github库的 Settings 页面找到 Webhooks & Services 选项点击 Configure services 按钮在出现的列表中找到 Packagist猛击它这里需要填写一些信息在Packagist网站的profile页面可以找到它们

User : Packagist上的用户名
Token : Packagist的授权令牌
Domain : http://packagist.org

  补全后点击 Update settings如果列表中显示绿剪头就表示OK了。

  真的OK了吗还是有点担心大不了我们再测试下嘛

  先跳出root目录在测试环境下新建一个文件夹

mkdir test-auto-update
cd test-auto-update
vim composer.json

  这次我们不使用init命令只往composer.json里填充一些简单内容

{
  "require": {
  "php": " >=5.3.0",
  "hou/composer-car": "dev-master"
  },
  "minimum-stability": "dev"
  }

  然后

  composer install

  安装完后扫一眼test-auto-update/src/Ford/Fiesta目录看下是否只有2013款的Fiesta然后暂时就不需要理会此目录下的内容了让我们回到composer-car目录。

  注这时test-auto-update/vendor下面的hou/composer-car对应建立项目时的( / ) [hou/composer-car]。

  听说2014款的嘉年华出了赶紧追加新的车款吧

  在 composer-car/src/Ford/Fiesta 目录下新建文件Fiesta2014.php填充它

< ?php
  namespace Ford\Fiesta;
  class Fiesta2014
  {
  public static function info()
  {
  echo "This is Ford Fiesta2014!< br / >";
  }
  }

  修改show.php在最后追加

  echo Fiesta\Fiesta2014::info();   访问测试页看看是否出现了

  This is Ford Fiesta2014!   ok再次提交代码

git add .
git commit -m "test auto update"
git push

  接着回到 test-auto-update 目录这次要换一个命令耍耍因为install命令之后root目录下会生成一个composer.lock文件已经安装过的依赖是不能通过install命令进行更新的所以这次需要使用composer update命令试试这个命令看看会发生什么

 $ composer update
  Loading composer repositories with package information
  Updating dependencies (including require-dev)
  - Updating hou/composer-car dev-master (91bceb0 = > 01550b4)
  Checking out 01550b4eeaa85513573ce7406ca7d46ee30c6978
  Writing lock file
  Generating autoload files

  类似这样的神秘信息又在屏幕上一闪而过实际上因为网络的缘故有时候得闪好久

  不管怎么闪更新成功后你就应该在 test-auto-update/vendor/hou/composer-car/src/Ford/Fiesta/ 文件夹下中找到新的 Fiesta2014.php 文件了。不过这里需要注意一点有时候Packagist与Github之间的同步可能会出现延迟这时不妨喝杯咖啡、找妹子聊会、扣扣鼻孔之类的噼里啪啦一会再回来试试更新操作。

  好吧我们在 test-auto-update 根目录下新建一个 index.php 文件看看是否能跑起来文件内容其实跟前面的show.php差不了多少

< ?php
  require 'vendor/autoload.php';
  use Ford\Fiesta as Fiesta;
  echo Fiesta\Fiesta2014::info();

  不错的话运行index.php文件后浏览器会输出

  This is Ford Fiesta2014!

  至此更新操作也被证实是OK了同志赶紧自己动手试试吧。

错误 [git] warning: LF will be replaced by CRLF | fatal: CRLF would be replaced by LF

遇到这两个错误是因为Git的换行符检查功能。 core.safecrlf

Git提供了一个换行符检查功能core.safecrlf可以在提交时检查文件是否混用了不同风格的换行符。这个功能的选项如下

false - 不做任何检查 warn - 在提交时检查并警告 true - 在提交时检查如果发现混用则拒绝提交 建议使用最严格的 true 选项。

core.autocrlf

假如你正在Windows上写程序又或者你正在和其他人合作他们在Windows上编程而你却在其他系统上在这些情况下你可能会遇到行尾结束符问题。这是因为Windows使用回车和换行两个字符来结束一行而Mac和Linux只使用换行一个字符。虽然这是小问题但它会极大地扰乱跨平台协作。

Git可以在你提交时自动地把行结束符CRLF转换成LF而在签出代码时把LF转换成CRLF。用core.autocrlf来打开此项功能如果是在Windows系统上把它设置成true这样当签出代码时LF会被转换成CRLF

$ git config --global core.autocrlf true

Linux或Mac系统使用LF作为行结束符因此你不想 Git 在签出文件时进行自动的转换当一个以CRLF为行结束符的文件不小心被引入时你肯定想进行修正把core.autocrlf设置成input来告诉 Git 在提交时把CRLF转换成LF签出时不转换

$ git config --global core.autocrlf input

这样会在Windows系统上的签出文件中保留CRLF会在Mac和Linux系统上包括仓库中保留LF。

如果你是Windows程序员且正在开发仅运行在Windows上的项目可以设置false取消此功能把回车符记录在库中

$ git config --global core.autocrlf false

0 条评论

还没有人评论。
您需要登录后才可以回复。登录 | 立即注册