Composer 安装两个包,以命令行执行其中一个的脚本,报错:函数重复定义

情况:Composer 安装两个包,以 cli 的方式,用 vendor/bin/phinx.bat 执行脚本,报错:函数重复定义。
问题:两包内部的确都有 env() 函数。但我执行的是 phinx 包的脚本,为什么会自动加载另外一个包?

而且还报两次错。

具体描述

包:

    "require": {
        "blink/blink": "0.4.*",
        "robmorgan/phinx": "~0.10"
    },

报错:

vendor\bin\phinx.bat

PHP Fatal error:  Cannot redeclare env() (previously declared in D:\Uio\cygwin64\home\newiep\test-app\vendor\cakephp\core\functions.php:200) in D:\Uio\cygwin64\home\newiep\test-app\vendor\blink\blink\src\support\helpers.php on line 126

Fatal error: Cannot redeclare env() (previously declared in D:\Uio\cygwin64\home\newiep\test-app\vendor\cakephp\core\functions.php:200) in D:\Uio\cygwin64\home\newiep\test-app\vendor\blink\blink\src\support\helpers.php on line 126

脚本内容:

@ECHO OFF
setlocal DISABLEDELAYEDEXPANSION
SET BIN_TARGET=%~dp0/../robmorgan/phinx/bin/phinx
php "%BIN_TARGET%" %*

#!/usr/bin/env sh

dir=$(cd "${0%[/\\]*}" > /dev/null; cd "../robmorgan/phinx/bin" && pwd)

if [ -d /proc/cygdrive ] && [[ $(which php) == $(readlink -n /proc/cygdrive)/* ]]; then
   # We are in Cgywin using Windows php, so the path must be translated
   dir=$(cygpath -m "$dir");
fi

"${dir}/phinx" "$@"

阅读 2.5k
1 个回答

通过 Git Issue 找到了答案,其中一个包的开发者为了这个问题,将自己的 env 增加了判断代码。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进