美文网首页
notes: 基于 Composer 的 PHP 模块化开发

notes: 基于 Composer 的 PHP 模块化开发

作者: xcyzjs | 来源:发表于2021-09-08 11:14 被阅读0次

笔记来源 overtrue: 基于 Composer 的 PHP 模块化开发

1. what & why

composer 是 php 版本的版本控制工具, 如 js 里的 npm, go 里的 mod.

1.1 composer.json 的组成

  • 基础字段 name, description, keywords, license
  • 依赖 require, require-dev
  • 自动加载: autoload, autoload-dev
    • PSR-4
    • PSR-0
    • classmate
    • files
  • 其它 scripts, minimum-stability, bin, repositories, support, config

其中, 若是一个项目, name 表示 project name, 若是一个包, name 表示 package name

在没有 composer 之前, 靠人工复制粘贴代码, 存在代码安全及 repeat yourself 的问题

1.2 版本号的组成

Major.Minor.Patch

  • major: 大的功能变更, 不向后兼容
  • minor: 新增功能, 向后兼容
  • patch: 补丁, 向后兼容, 修复 bug

1.2.1 ~, ^ 区别

  • "~": 指定向后兼容的最小版本
    • ~1.2 表示 >=1.2 && <2.0.0
    • ~1.2.3 表示 >=1.2.3 && <1.3.0 (二者有区别处)
  • "^": 指定向后兼容的所有版本
    • ^1.2 表示 >=1.2 && <2.0.0
    • ^1.2.3 表示 >=1.2.3 && <2.0 (二者有区别处)

1.2.2 使用版本号

  • 确切版本 1.0.2
  • 范围 >=1.0, >=1.0<2.0, >=1.0<1.1 || >=1.2
  • 连字符范围 1.0-2.0
  • 通配符 1.0.*
  • 波浪 ~1.2.3
  • caret ^1.2.3

1.3 版本锁定 composer.lock

  • 不存在 .lock 文件
    • composer install 安装依赖同时生成 .lock 文件
    • composer update 安装(更新)依赖同时生成 .lock 文件
  • 存在 .lock 文件,
    • composer install 会直接使用该文件安装
    • composer update 会忽略该文件, 更新同时生成新的 .lock 文件

使用说明, 发布包不要携带 .lock 文件, 项目则一定要携带 .lock 文件

注意: 项目不要直接使用 composer update, 如有需要, 应该单独给指定包进行 composer update package...

2. how

2.1 创建一个包

$ mkdir my-package && cd my-package
$ composer init

2.2 使用(测试)自己创建的本地包

# 另起一个 project
$ mkdir my-package-test
$ cd my-package-test
$ composer init
# 添加 repositories 项目
#  - type 为 path
#  - url 使用相对路径指向 my-package
# require 中 添加 yourname/my-package: *
$ composer install

也可以使用 composer config repositories.foo path /users/test/foo/bar 来给 composer 添加项目源, 然后就可以使用 composer require foo/bar:dev-master -vvv 进行安装.

? 实际上并非复制到 vendor 目录里, 而是一个软链接, 从而可以直接在 vendor 里修改包 ?

2.3 安装官方(packagist.org)依赖包

  • 方式一: 编辑 composer.json && composer update
  • 方式二: composer require package_name

写完后可以使用 composer validate 进行验证是否有编辑错误

2.4 更新依赖

  • 更新全部 composer update
  • 更新指定包 composer update package_name

相关文章

网友评论

      本文标题:notes: 基于 Composer 的 PHP 模块化开发

      本文链接:https://www.haomeiwen.com/subject/heqvwltx.html