如何在Composer中忽略所有扩展要求但保留PHP版本检查?
解决Composer忽略所有扩展要求但保留PHP版本检查的问题
哈哈,这个需求我之前帮朋友处理过,确实有点绕——既要跳过一堆扩展的依赖检查,又不想放松PHP版本的限制,给你几个实用的办法:
方法一:利用Composer 2.x的通配符支持(最简单)
如果你用的是Composer 2.0及以上版本,直接用引号包裹ext-*就能精准忽略所有扩展要求,同时保留PHP版本检查:
composer install --no-dev -W -o --ignore-platform-req="ext-*"
之前你用--ignore-platform-req='ext-*'无效,大概率是shell解析问题:在bash里,单引号虽然能阻止通配符展开,但有些环境下可能还是会出问题;换成双引号或者直接不带引号(如果当前目录没有以ext-开头的文件)也能行。另外,如果你的Composer版本太旧(比如1.x),是不支持通配符的,先跑composer self-update升级到最新稳定版再试。
方法二:自动生成忽略参数(兼容Composer 1.x)
要是你的环境只能用Composer 1.x,或者通配符还是不好使,可以用shell命令自动提取所有需要忽略的扩展,不用手动逐个输入:
# 第一步:获取所有缺失的扩展(只提取ext-开头的) EXT_IGNORES=$(composer check-platform-reqs | grep '^ext-' | awk '{print $1}' | tr '\n' ' ') # 第二步:把这些扩展转换成--ignore-platform-req参数 COMPOSER_ARGS=$(echo "$EXT_IGNORES" | sed 's/ / --ignore-platform-req=/g' | sed 's/^/--ignore-platform-req=/') # 第三步:执行安装命令 composer install --no-dev -W -o $COMPOSER_ARGS
这个脚本会自动检测所有扩展类的依赖缺失,然后批量生成忽略参数,全程不用手动干预。
方法三:在composer.json中模拟扩展存在(一劳永逸)
你也可以在项目的composer.json里配置platform,让Composer认为这些扩展已经安装在你的环境里:
"config": { "platform": { "php": "5.6", "ext-simplexml": "*", "ext-json": "*", "ext-ctype": "*", // 其他缺失的扩展可以继续添加 } }
这个方法的好处是不用每次执行命令都加参数,但需要先跑composer check-platform-reqs查看所有缺失的扩展,然后逐个添加到platform里。
内容的提问来源于stack exchange,提问作者Mohammed Saimon
相关产品推荐
相关产品推荐

