Composer&Cygwin

Pop*_*lus 28 cygwin composer-php

如果您尝试"全局"安装,则Composer无法在Cygwin中正确运行.

将composer.phar放入/ usr/local/bin/composer,然后尝试运行它将导致错误:

Could not open input file: /usr/local/bin/composer
Run Code Online (Sandbox Code Playgroud)

aef*_*fxx 62

刚刚遇到同样的问题并找到了解决方案.将它发布在这里,万一我将不得不再次查找它.

  1. 在以下位置设置bin目录/home/my-username:

    cd ~
    mkdir bin
    
    Run Code Online (Sandbox Code Playgroud)
  2. composer.phar(或任何其他那些正在兴起的新的PHP imps)移动到~/bin目录中并确保设置它的执行位:

    # Notice how I got rid of the superfluous `.phar` extension
    mv /path/to/composer.phar ~/bin/composer
    chmod +x ~/bin/composer
    
    Run Code Online (Sandbox Code Playgroud)
  3. 告诉cygwin~/bin在搜索路径中包含您的目录:

    打开文件~/.bash_profile并取消注释以下段落...

    # Set PATH so it includes user's private bin if it exists
    if [ -d "${HOME}/bin" ] ; then
      PATH="${HOME}/bin:${PATH}"
    fi
    
    Run Code Online (Sandbox Code Playgroud)
  4. 现在,最重要的部分:

    一个包装脚本,帮助Win的本机PHP解析Unix样式路径(因为Windows不知道如何处理/cygdrive/...路径,导致问题).

    cd ~/bin
    touch php
    chmod +x php
    
    Run Code Online (Sandbox Code Playgroud)

    编辑完包装脚本后~/bin/php应阅读:

    #!/bin/bash
    
    # e.g. php="/cygdrive/c/Program Files (x86)/php/php.exe"
    php="/path/to/php.exe"
    
    for ((n=1; n <= $#; n++)); do
        if [ -e "${!n}" ]; then
            # Converts Unix style paths to Windows equivalents
            path="$(cygpath --mixed ${!n} | xargs)"
    
            case 1 in
                $(( n == 1 )) )
                    set -- "$path" "${@:$(($n+1))}";;
                $(( n < $# )) )
                    set -- "${@:1:$((n-1))}" "$path" ${@:$((n+1)):$#};;
                *)
                    set -- "${@:1:$(($#-1))}" "$path";;
            esac
        fi
    done
    
    "$php" "$@"
    
    Run Code Online (Sandbox Code Playgroud)
  5. 现在重新启动你的shell,它应该正确地调用PHP解释器,只要它偶然发现了一个#!/usr/bin/env phpshebang.只需发出一个:

    composer --help
    
    Run Code Online (Sandbox Code Playgroud)

  • 我使用一个简单的`别名composer ='php"$(cygpath -w~/bin/composer.phar)"'(用php)修改它专门为作曲家而不需要包装脚本(这是一个更通用的解决方案)当然是PATH) (3认同)
  • @ TheodoreR.Smith非常好,但请不要发送任何款项.对你有用的简单事实就足够了. (2认同)
  • 只是快速评论,您无需关闭外壳即可。〜/ .bashrc`或`source〜/ .bashrc`来重新加载文件,第二个注释在MobaXterm上也很出色(在本地会话中运行gygwin) (2认同)

rko*_*kok 10

这个怎么样?

  1. 在〜/ .bashrc中,添加: alias composer='php c:\\your\\path\\to\\composer.phar'
  2. 重新启动cygwin或通过运行重新加载bashrc source ~/.bashrc

使用Cygwin的本机php.exe和XAMPP的Windows特定版本,对我有用.


Sel*_*aek 7

我认为可能有用的是建立一个代理:

  • 将composer.phar放在/usr/local/bin/composer.phar中
  • 使用以下命令创建一个bash代理作为/ usr/local/bin/composer:

    #!/bin/sh
    c:/path/to/php c:/path/to/composer.phar $@
    
    Run Code Online (Sandbox Code Playgroud)
  • chmod + x/usr/local/bin/composer


Nic*_*sai 5

尝试这个:

  • 安装 Cygwin PHP 并使用它在 Cygwin 中运行 Composer。

您可以选择以下两种方式之一在 Cygwin 中使用 PHP+Composer 正常工作:

  1. 安装 Cygwin PHP 并在 Cygwin 中安装 composer.phar。

  2. 安装 Windows PHP 并安装 Windows Composer,然后从 Cygwin 调用 then。(Windows XAMMP+Composer 在 cmd 中有别名)


Your problem is caused by that Cygwin Composer is ruining by Windows PHP on Cygwin, so it can not recognize the file path.

After install Cygwin PHP, the composer will integrates with Cygwin PHP then fit to Cygwin's filepath.

Cygwin PHP extensions for composer usage:

php
php-json
php-mbstring
php-phar 
php-zip
php-posix
Run Code Online (Sandbox Code Playgroud)

You can install other PHP extension when composer's package is needed such as php-xmlwriter, php-tokenizer, php-ctype.


Installation commands guide:

If you have already installed apt-cyg, there are installation command above:

apt-cyg install php php-json php-mbstring php-phar php-zip php-posix
apt-cyg install php-xmlwriter php-tokenizer php-ctype
Run Code Online (Sandbox Code Playgroud)

Then install Composer via Cygwin PHP:

php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php composer-setup.php
php -r "unlink('composer-setup.php');"
chmod +x ./composer.phar
mv ./composer.phar /usr/bin/composer
composer -v
Run Code Online (Sandbox Code Playgroud)

Conclusion

I recommend using Windows PHP + Windows Composer, and call then in Cygwin, it because the Cygwin PHP is not much stable than Windows PHP.