博客列表 >composer常用操作

composer常用操作

李玉峰
李玉峰原创
2022年05月12日 22:06:31992浏览

composer 与 mvc

1. 更实用的类自动加载器

  • 演示基于包的自动加载器: autoloader.php
  • composer 自动加载就是基于这个原理

2. composer

composer 是什么

  • composer 是 php 的一个依赖管理器,并非包管理器
  • 它只是基于某个项目,所有依赖安装到指定目录中vendor,而非全局

composer 工作流

  • 你有一个项目,依赖于若干库
  • 其实一些库,又依赖于其它库
  • 你只需要你所依赖的库
  • composer 会找出对应版本的包/库进行安装(下载到特定目录)

3. 下载与安装

windows

mac/linux

php 不可用时的解决方案

  1. # 执行官方安装命令
  2. curl -sS https://getcomposer.org/installer | php
  3. # 会失败,因为php程序找不到
  4. which php
  5. # 的确提示php找不到
  6. # 最新macos不再内置php,所以php命令不可用,需要手工设置php路径
  7. # 以MAMP为例,其它集成环境工作也是一样的
  8. # 通过查看得知MAMP Pro,php7.4路径
  9. # 打开~/.bash_profile并插入
  10. sudo vi ~/.bash_profile
  11. # 按i进入插入状态,并输入/或粘贴以下内容
  12. export PATH="/Applications/MAMP/bin/php/php7.4.21/bin:$PATH"
  13. #按 :wq 保存后退出
  14. # 执行一下 ~/.bash_profile
  15. source ~/.bash_profile
  16. # 再次查看php路径
  17. which php
  18. # 输出:/Applications/MAMP/bin/php/php7.4.21/bin/php 正确
  19. # 推荐使用别名链接
  20. php: aliased to /Applications/MAMP/bin/php/php7.4.21/bin/php -c "/Library/Application Support/appsolute/MAMP PRO/conf/php7.4.21.ini"
  21. composer: aliased to /Applications/MAMP/bin/php/composer
  22. # 如果你使用的MAMP, 在选择PHP版本时,将下面的active...also 二个全选上,将无视上面全部操作

下载安装 composer

  1. # 下载到当前项目中
  2. curl -sS https://getcomposer.org/installer | php
  3. # 执行完毕,会在当前项目目录中看到一个 composer.phar 文件, 这就是composer命令执行器
  4. # 目前composer只能用到当前项目中,且需要通过 composer.phar来执行
  5. # 为了简化composer的使用, 将composer.phar移动到全局,并简化为composer
  6. # macos中, 应该在命令前用 sudo 提升权限 ,否则拒绝访问
  7. sudo mv composer.phar /usr/local/bin/composer
  8. # 执行成功后, 当前项目目录中的composer.phar就没有了,被移动了
  9. # 这时,可查看一个composer版本,以确定简化命令composer可用
  10. # 从此不必再使用完整的compser.phar命令了,当然全称命令也失效了不能更用
  11. composer --version
  12. # Composer version 2.3.5 2022-04-13 16:43:00
  13. # 输入composer,可查看所有composer指令
  14. composer

设置国内镜像

composer 是从源址下载,而非 zip,而国外网站下载很慢且可能失败
因为推荐将下载源切到国内镜像地址
国内提供类似服务的镜像很多,大家常用的是阿里的, 原因不必说了

  1. # 直接在终端中输入以下命令即可,不会有任何输出,就对了
  2. composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/
  3. # 查看composer 所有全局配置项,可以看到像像源
  4. composer config -gl

4. composer.json

  • composer.json 是配置文件,也是 composer 的核心
  • 主要功能
    • 自动下载或加载第三方组件包以及依赖管理
    • 自动加载用户自定义包或函数库

创建

  • 直接在项目根目录中手工创建: composer.json
  • 使用composer init指令交互式创建

交互式创建会产生的许多元字段,主要用于发布包,而我们主要是使用包,所以手工创建它
注意, 打开终端工具后, 先进入到项目中,如不确定,可用 pwd 查看一下当前路径
使用composer init创建的composer.json大致这样

  1. {
  2. "name": "zhupeter/0505-1",
  3. "authors": [
  4. {
  5. "name": "zhupeter",
  6. "email": "zhuyuseng@qq.com"
  7. }
  8. ],
  9. "require": {}
  10. }

下面我们手工创建一个composer.josn

  1. {}

啥也不用写,为空即可, 执行以下命令

  1. # 切换到项目目录,如0505-1,输入以下指令
  2. composer dumpautoload
  3. # 输出: Generating autoload files 翻译: 生成自动加载器文件
  4. # 该指令主要用于创建或更新composer的自动加载器
  5. # 如果是第一次执行,你会看到在当前项目根目录下多出一个vendor目录
  6. # 该vendor目录下面有一个composer目录有一个autoloaded.php文件

自定义类的自动加载

composer.json内容如下:

  1. {
  2. "autoload": {
  3. "classmap": ["lib/", "src/", "app/Test1.php"]
  4. }
  5. }

终端执行: composer dmupautoload将指定目录下的类或指定的类文件注册到 compser 中
所谓类注册,就是写到`vendor/composer/autoload_classmap.php类映射文件中
特别注意: lib,src 目录, app/Test1.php 必须是类文件才有效,其它非类文件使用”files”字段注册

自定义的其它非类文件的加载

自加加载数据库配置和公共函数库文件
composer.json文件如下:

  1. {
  2. "autoload": {
  3. "classmap": ["lib/", "src/", "app/Test1.php"],
  4. "files": ["config/database.php", "func/helper.php"]
  5. }
  6. }

执行: composer dumpautolaod,查看文件注册器:vendor/composer/autoload_files.php
可以看到,已正确注册成功

PSR-4 自动加载

  • PSR:(Standard Recommendations)PHP 推荐标标准的简写,由 PHP FIG 组织制定的 PHP 开发规范
  • PSR 的规范很多, 大家感兴趣, 可翻阅相关资料, 这里重点讲一个自动加载相关的PSR-4
  • PSR-4: 类命名空间可到映射到类文件所在的路径,要求类名与类文件同名,且文件中只有一个类
  • 所以在 PSR-4 字段中,只需要定义一个空间起点即可, 剩下的通过子空间映射到子目录中即可
  1. {
  2. "autoload": {
  3. "classmap": ["lib/", "src/", "app/Test1.php"],
  4. "files": ["config/database.php", "func/helper.php"],
  5. "psr-4": {
  6. "admin\\": "admin/"
  7. }
  8. }
  9. }
  • “admin\“是命名空间, 对应的值”admin/“是映射到的目录
  • “admin\“是顶层命名空间, 可看成空间查询的起点,后面还可有admin\controller\...
  1. // 如果composer.json : psr-4是: "admin\\": "admin/"
  2. namespace admin
  3. // 命名空间: admin
  4. // 则在admin目录下查找到User1类
  5. class User1
  6. {
  7. //...
  8. }
  9. // 访问方式
  10. admin\User;
  11. // 如果类文件是
  12. namespace admin\controller;
  13. // 命名空间: admin\controller
  14. // 则在admin/controller目录下查找到User2类
  15. class User2
  16. {
  17. //...
  18. }
  19. // 访问方式: 子空间
  20. admin\controller\User

使用第三方组件库/包

  • 组件外查询与下载平台: https://packagist.org/, 类似手机上的应用商店
  • 这上面有很多优秀的第三方 php 包,可以直接引用到自己的项目中
  • 引用方式有二种

    • composer.json添加require字段, 用composer install下载安装该包
    • 直接在终端使用指令composer require 包安装该包,并更新composer.json
  • 手工安装一个包: 验证码包 yangyezi/captcha
    composer.json

  1. "require": {
  2. "youngyezi/captcha": "6.0.*"
  3. }
  4. ```

终端执行composer install, 将会自动下载 captcha
观察 vendor 目录,会发现除了 captcha 目录外,还有许多其它目录和文件,这就是该包的依赖,也一并下载安装了
同时,还创建一个叫composer.lock的配置锁文件,将当前版本锁定,这样大家都可以得到一个一致的开发环境

  • 自动安装一个常用的数据库模型包:

    • 终端指令: composer require catfan/medoo
    • 观察vendor目录查看该包文件
    • 打开composer.json观察require字段
    • 打开composer.lock观察该包的版本号
  • 下面演示一下,如何使用第三方的组件包

  • 还有一种,可以直接从第三方包,创建一个本地项目,用 thinkphp,laravel 等框架

  • 在包列表中搜索 thinkphp: https://packagist.org/?query=thinkphp
  • 会看到二个相关的,二者使用的命令并不相同
    • topthink/think:
      • composer create-project topthink/think
      • 专用于创建基于composer的项目,只要一个包名,就可以根据这个包创建一个完整项目
      • 相当于执行git clone后, 再将这个包依赖安装到vendor目录
      • 不仅下载第三方包,还会创建相关目录和配置,并全部放到指定目录下
      • 可以快速的部署你的项目
      • 多人开发项目, 并用它来快速初始化项目
    • topthink/frameword:
      • composer require topthink/framework
      • 只在 vendor 中安装指定的包,通常用于更新核心文件

实战:安装ThinkPHP框架

  1. # 安装thinkphp框架,并创建一个项目: blog,即将整个框架安装到blog项目目录中
  2. # 默认安装最新稳定版
  3. composer create-project topthink/think blog
  4. # 测试一下,访问 blog/public/index.php,看到欢迎页面, 表示tp项目安装成功
  5. # 可以创建项目时,指定基于composer包的版本号,如5.0
  6. composer create-project topthink/think blog 5.0.*
  7. # 如果只使用composer require topthink/framework,则不会创建blog目录以及内部目录和文件
  8. # 大家课后可以测试一下

其它常用的指令

  • 更新 composer 到最新版本: composer selfupdate
  • 更新所有包或指定的包: composer update 空/*/包名列表空格分隔
  • 移除包: composer remove 包
  • 查看所有包: composer show
  • 查看指令帮助信息: composer help install
  • 更多指令: composer回车后可以看到
声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议