phpkg 让 PHP 摆脱 Composer 依赖地狱

Composer 挺好,但 PHP 还能更强

写 PHP 的都知道,Composer 用起来很顺手:composer requirevendor/、自动加载——这些操作闭着眼都能做。这么多年来,它确实是 PHP 依赖管理的标杆。但实话说,它也有不少毛病。你有没有被巨大的 vendor/ 目录搞得心烦?被只能加载类的限制憋屈过?或者纳闷为什么 PHPStan 这种工具每个项目都得装一遍?

我也被这些问题折磨过。PHP 确实很灵活——做 Web、API、脚本都行——但总感觉被框住了。为什么 PHP 只能做 Web,而 Python 随便就能写出各种命令行工具?带着这些疑问,我发现了 phpkg,一个正在改变 PHP 游戏规则的新包管理器。先说结论:它不是 Composer 的山寨版——而是对 PHP 开发方式的全新思考。

原文链接 phpkg 让 PHP 摆脱 Composer 依赖地狱

核心问题:工具不该当依赖

举个例子:你手头有三个项目。每个都要用 PHPStan 检查代码,PHPUnit 跑测试,可能还有几个自己写的脚本。用 Composer 的话,就得搞三个 vendor/ 目录,下载三遍,装三套依赖——团队每个人都这样,全世界每个项目都这样。这不光是硬盘空间的事,还有网络带宽、下载时间,全球服务器的负担也跟着增加。这不是有点过分吗?

关键是,这些东西根本不是你应用的代码——它们只是工具。PHPStan 又不会部署到生产环境,为什么每个 composer.json 都要写一遍?这就好比每个房间都放一把锤子,而不是工具箱里放一把就够了。我们习惯了这种浪费,但完全没必要。

phpkg 登场

phpkg 就是来解决这些问题的。它是个轻量级、基于 Git 的包管理器,砍掉了那些没用的东西,把主动权还给开发者。为什么大家开始关注它?看看这些特点:

支持函数,不只是类

Composer 的 PSR-4 自动加载确实不错——但只对类有用。想写个简单函数?只能包装成类。phpkg 不这样:它直接支持命名空间函数的自动加载。你写个 App\Utils\log($msg) 函数,不用包装成类,phpkg build 就能搞定。这才是 PHP 函数式编程该有的样子。

namespace App\Utils;

function log($msg) {
echo $msg;
}
// 不需要类——phpkg 处理它

只要 Git 就够了

不需要什么中央仓库,也不用 Packagist 做中介——直接用 Git URL 就行。添加包就这么简单:

phpkg add https://github.com/php-repos/test-runner.git

包会被克隆到 Packages/ 目录,版本信息记录在 phpkg.config.json 里,马上就能用。速度快,很灵活,私有仓库或者最新分支都没问题。

独立运行 PHP 程序

这里就厉害了。phpkg runphpkg serve 可以让你不用建项目就直接运行包。想在命令行看天气?

phpkg run https://github.com/php-repos/weather.git

想要个日常看板在浏览器里显示——不用搭服务器?

phpkg serve https://github.com/php-repos/daily-routine.git

这些命令会自动下载、构建,然后在临时环境里运行包。不用 vendor/ 目录,不用 Web 服务器——就是 PHP 在干活。这下 PHP 终于像 Python 了:可以写工具、写小程序、写一次性脚本。

干净利落

phpkg 不搞 vendor/ 那套乱七八糟的东西。它的构建命令会解析命名空间——函数、类、常量——只加载需要的部分。移动了文件?没关系——phpkg watch 会实时重新构建。这才是不浪费时间的工作方式。

这玩意儿有啥用

PHP 被当成 Web 专用语言太久了。有了 phpkg,终于能突破这个限制。比如:

PHPStan 装一次,所有项目都能用:

phpkg run https://github.com/phpstan/phpstan.git phpstan analyze ./my-app

给团队写个小工具,发个 Git 链接就行——不用搭环境。

想要个个人看板(币价、新闻、待办)?一行命令搞定。

这不光是图方便——是真的提高效率。下载少了,重复少了,复杂度也降了。

个人体验

之前做 daily-routine 这个项目时感受很深。想做个个人看板——天气、币价、新闻——每天看一眼。用 Composer 的话,得搭个 Web 项目,还要配置服务器。用 phpkg serve 就简单了:

phpkg serve https://github.com/php-repos/daily-routine.git

打开 localhost:8000 就能用。不用域名,不用 Nginx——就是 PHP 在干活。那时候才明白:phpkg 不是要替换 Composer,而是让 PHP 能做更多事。

体验一下

先装 phpkg:

bash -c "$(curl -fsSL https://raw.github.com/php-repos/phpkg-installation/master/install.sh)"

跑个 Chuck Norris 笑话生成器:

phpkg run https://github.com/php-repos/chuck-norris.git

或者跑个日常看板:

phpkg serve https://github.com/php-repos/daily-routine.git

不用建项目,不用写 composer.json——直接出结果。

详细文档在 phpkg.com,可以去看看。

总结

phpkg 不是要替换 Composer,而是给 PHP 更多可能性。让 PHP 更简洁,更灵活,更好用。虽然还在早期阶段(Windows 的 serve 功能还在开发),但方向很明确:让 PHP 成为工具开发者的好伙伴。

PHP 开发者们,现在可以试试用 PHP 做更多事了。CLI 工具?本地应用?小脚本?都可以试试。

phpkg 让 PHP 摆脱 Composer 依赖地狱的更多相关文章

  1. 对以内部 git 仓库为 composer 依赖的 package,加上版本号

    现实问题 之前同事做了一个 composer package,做为公司大量 laravel 项目的通用模块. 但是,在实际使用中,每个项目对改 package 的依赖版本是有所不同的.否则 compo ...

  2. 更新Composer依赖报错处理Fatal error: Declaration of Fxp\Composer\AssetPlugin\Repository\AbstractAssetsRe

    更新Composer依赖报错处理 Fatal error: Declaration of Fxp\Composer\AssetPlugin\Repository\AbstractAssetsRe po ...

  3. composer依赖管理与laravel框架安装

    步骤有点多,生怕哪一天忘记,记录下来会好点 laravel安装有两种途径:1.直接在一些国内第三方网站,如:https://www.golaravel.com/download/ 下载压缩包来解压即可 ...

  4. Composer依赖管理 – PHP的利器

    别再到处搜PHP类扩展包了,对于现代语言而言,包管理器基本上是标配.Java 有 Maven,Python 有 pip,Ruby 有 gem,Nodejs 有 npm.PHP 的则是 PEAR,不过 ...

  5. PHP Composer 依赖管理的用法

    1:下载 1.1:方法一: 通过PHP来安装 cd G:\web\es6 curl -sS https://getcomposer.org/installer | php #这个命令会下载compos ...

  6. composer 依赖的require安装与remove删除命令

    安装:require composer require phpmailer/phpmailer 删除:remove composer remove phpmailer/phpmailer

  7. composer php依赖管理工具

    #composer是什么 Composer 是 PHP 的一个依赖管理工具.它允许你申明项目所依赖的代码库,它会在你的项目中为你安装他们. composer出现之前我们php项目依赖管理大部分都是手动 ...

  8. composer 安装依赖缓慢,查看 composer 的详细执行日志

    在 windows WSL 上安装 composer 依赖 composer install 发现执行异常缓慢,怀疑没有走国内的镜像,而是直接访问的 github. 需要能看到 composer 的执 ...

  9. 如何避免 async/await 地狱

    简评:async/await 写着很爽,不过要注意这些问题. async/await 让我们摆脱了回调地狱,但是这又引入了 async/await 地狱的问题. 什么是 async/await 地狱 ...

  10. 修改 Mac 默认 PHP 运行环境,给 MAMP 配置全局 Composer

    在没有配置全局性的 Composer 的时候,如果你在没有安装 Composer 的目录下运行 Composer 命令,比如:create-project 系统会返回: Could not open ...

随机推荐

  1. 开发工具系列001-Git Tag

    本文简单介绍 git 仓库中 tag 的用法. 如何为 git 仓库打上 tag 标记. git tag // 查看当前仓库的 tag 信息,如果当前没有版本则显示为空 git tag -l &quo ...

  2. IPC 共享信号量 共享内存的创建失败的原因分析 LINUX 网络编程第二版

    linux 网络编程书 对于 semid = semget(key,1,IPC_CREAT|0666); /获得信号量的ID/ 写错了 书里面写的是0 ,这个参数的意义代表的是,信号量的数量. 有点烦 ...

  3. 小米路由器 mini 重新刷回官方固件

    小米路由器 mini 重新刷回官方固件 注:因为太久了忘记openwrt的密码了所以重新刷回,官方固件 找个U盘,将其格式化成FAT/FAT32格式,将下载好的小米固件miwifi_r1cm_firm ...

  4. opengl 坐标系

    简介 世界坐标是OpenGL中用来描述场景的坐标,Z+轴垂直屏幕向外,X+从左到右,Y+轴从下到上,是右手笛卡尔坐标系统.

  5. SciTech-EECS-Circuits-Digital(数字电路): 信号采样(电流+电压) : PWM 控制器: SG3525A / EL817 应用之 高频感应机 + 等离子切割机 + "逆变直流电焊机"的: Latch(锁存器) + Flip/Flop(触发器) + 记忆存储电路

    SciTech-EECS-Circuits-Digital(数字电路) 信号采样(电流:互感器+电压:采样电阻) 在3KV以上的高压系统,电流/电压传感器 都要与传统的高压互感器配合, 替代传统的电量 ...

  6. SciTech-Mathematics-Probability+Statistics-Matlab(Mathworks Inc.): MATLAB官方文档就是非常好的教材

    SciTech-Mathematics-Probability+Statistics Probability Distributions: https://ww2.mathworks.cn/help/ ...

  7. ICEE-Power-开关电源:常用改输出电压的原理 及 元器件作用

    固定电压切换为可调电压电路: 输出电压调整,不仅要调整采样比例电阻, 还要解除或调整防止过压保护电路: 而保护电路,不只是输出端有,而且驱动功率管的PWM芯片也可能有: 光耦反馈电路: 输出电压(48 ...

  8. babylon.js 学习笔记(9)

    接上回继续,做为一个游戏引擎,怎能没有Sprite(精灵)? 下面是基本示例: const createScene = function () { const scene = new BABYLON. ...

  9. mysql 中 myisam 与 innodb 的区别?

    1. 事务支持 > MyISAM:强调的是性能,每次查询具有原子性,其执行数 度比 InnoDB 类型更快,但是不提供事务支持. > InnoDB:提供事 务支持事务,外部键等高级数据库功 ...

  10. GlobalCache 工具类

    package com.neo.config;import org.springframework.stereotype.Component;import java.util.Map;import j ...