鍍金池/ 問答/PHP/ Composer 安裝兩個包,以命令行執(zhí)行其中一個的腳本,報錯:函數重復定義

Composer 安裝兩個包,以命令行執(zhí)行其中一個的腳本,報錯:函數重復定義

情況:Composer 安裝兩個包,以 cli 的方式,用 vendor/bin/phinx.bat 執(zhí)行腳本,報錯:函數重復定義。
問題:兩包內部的確都有 env() 函數。但我執(zhí)行的是 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" "$@"

回答
編輯回答
我不懂

通過 Git Issue 找到了答案,其中一個包的開發(fā)者為了這個問題,將自己的 env 增加了判斷代碼。

2017年10月6日 01:19