创建自己的 Composer 包。

设置 composer.json

  1. $ composer init
  2. Welcome to the Composer config generator
  3. This command will guide you through creating your composer.json config.
  4. Package name (<vendor>/<name>) [administrator/lh1010]: lh1010/lh1010
  5. Description []: lh1010
  6. Author [Jasper <610392592@qq.com>, n to skip]:
  7. Minimum Stability []: dev
  8. Package Type (e.g. library, project, metapackage, composer-plugin) []: library
  9. License []: MIT
  10. Define your dependencies.
  11. Would you like to define your dependencies (require) interactively [yes]? no
  12. Would you like to define your dev dependencies (require-dev) interactively [yes]? no
  13. {
  14. "name": "lh1010/lh1010",
  15. "description": "lh1010",
  16. "type": "library",
  17. "license": "MIT",
  18. "authors": [
  19. {
  20. "name": "Jasper",
  21. "email": "610392592@qq.com"
  22. }
  23. ],
  24. "minimum-stability": "dev",
  25. "require": {}
  26. }
  27. Do you confirm generation [yes]? yes
  28. Would you like the vendor directory added to your .gitignore [yes]? yes

生成后的 composer.json:

  1. {
  2. "name": "lh1010/lh1010",
  3. "description": "lh1010",
  4. "type": "library",
  5. "license": "MIT",
  6. "authors": [
  7. {
  8. "name": "Jasper",
  9. "email": "610392592@qq.com"
  10. }
  11. ],
  12. "minimum-stability": "dev",
  13. "require": {}
  14. }

修改 composer.json:

  1. {
  2. "name": "lh1010/lh1010",
  3. "description": "lh1010",
  4. "type": "library",
  5. "license": "MIT",
  6. "authors": [
  7. {
  8. "name": "Jasper",
  9. "email": "610392592@qq.com"
  10. }
  11. ],
  12. "minimum-stability": "dev",
  13. "require": {
  14. "php": ">=5.4.0"
  15. },
  16. "autoload": {
  17. "psr-4": {
  18. "Lh1010\\": "src/"
  19. }
  20. }
  21. }

src 相关文件

在当面目录下创建 src/Tools.php 测试文件:

  1. <?php
  2. namespace Lh1010;
  3. class Tools
  4. {
  5. public static function demo()
  6. {
  7. echo 'This is demo';
  8. }
  9. }

映射关系

  1. composer install

此时会在 vendor/composer/autoload_psr4.php 中生成命名空间和目录的映射关系,被包在一个数组中:

  1. <?php
  2. // autoload_psr4.php @generated by Composer
  3. $vendorDir = dirname(dirname(__FILE__));
  4. $baseDir = dirname($vendorDir);
  5. return array(
  6. 'Lh1010\\' => array($baseDir . '/src'),
  7. );

本地测试

  1. <?php
  2. require './vendor/autoload.php';
  3. use Lh1010\Tools;
  4. Tools::demo();

packagist

上传 Composer 包至 github。注意:.gitignore 屏蔽 vendor 文件。
创建 packagist.org 账号,提交至 packagist:
创建包 - 图1
到这里,composer 包就提交成功了,如图:
创建包 - 图2
网上有说同步的问题,但在测试当天(19-03-21),通过 packagist 提交后,与 github 已自动同步。可能原因:使用 github 账号授权登录 packagist(待验证)。
创建包 - 图3
测试 dev 版本:

  1. composer require lh1010/lh1010 dev-master

当前目录下创建 index.php:

  1. <?php
  2. require './vendor/autoload.php';
  3. use Lh1010\Tools;
  4. Tools::demo();

发布正式版

版本默认是 dev-master,Composer 包的版本号会从 Git 的 tag 中同步过来,因此先设置项目代码的 tag。

  1. git tag 1.0.0
  2. git push --tag
  1. composer lh1010/lh1010