Using rector in an Windows environment

I'm having trouble running rector in an Windows environment. 

Windows 10

PhpStorm 2022.2

XAMPP (PHP 7.4.29)

rector 0.13.10, installed with composer, vendor/bin/rector init executed on cli. 

=> vendor directory is in the root. 

There is an issue in YouTrack, that request selecting an CLI-Interpreter. So I selected my php.exe. 

https://youtrack.jetbrains.com/issue/WI-67432/Rector-misleading-error-if-no-interpreter-is-selected-for-a-project-Windows

With this setting, a right-click on a folder and "run rector" results in the command: 

E:\xampp\php\php.exe vendor/bin/rector process E:/xampp/htdocs/contentbroker/batch --output-format=json --dry-run

which outputs the content of the called script "endor/bin/rector", because it's not a php-Skript. 

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

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

"${dir}/rector" "$@"

=> without the CLI setting the error just says: 

Error running 'batch': Cannot run program "vendor\bin\rector" (in directory "E:\xampp\htdocs\contentbroker"): CreateProcess error=2, System can't find file. 

Has anyone successfully run rector von Windows? Hat settings are neccessary? 

Regards: Chris

评论操作 固定链接

Sorry, not sure if understood the "installed with composer" part. Is it installed globally or you have it installed within the project?
btw, here is Rector on Windows with a `rector/rector` installed via the project `composer.json`:

0
评论操作 固定链接

Thank you for your quick reply. Yes, I installed rector in the project with composer,json.

Your screenshot is interesting. Looks like you defined your CLI-Interpreter c:\PHP806\php.exe. 
This calls

vendor/bin/rector

in my vendor/bin directory I have 

rector

rector.bat

rector.php

In my constallation the rector file (without extension) is executed, or parsed by the php-cli.which outputs it's content (the shell skript). 

So maybe your system autodetects that php-CLI shoud execute

vendor/bin/rector.php

instead of

vendor/bin/rector

 

 

0
评论操作 固定链接

Looks like I found the problem. Installed the environment on another machine and there it worked finde. So I checked the vendor/bin/rector file and found the content to be completly different :

#!/usr/bin/env php
<?php

/**
 * Proxy PHP file generated by Composer
 *
 * This file includes the referenced bin path (../rector/rector/bin/rector)
 * using a stream wrapper to prevent the shebang from being output on PHP<8
 *
 * @generated
 */

So obviously the problem is known, but the composer on my first machine installs a different, outdated rector version, also it's called 

   "require-dev": {
        "rector/rector": "^0.13.10"
    }

on both machines... any idea, why composer acts different? 

0
评论操作 固定链接

In my case, "C:\PHP806\php.exe" was taken from the PHP CLI Interpreter IDE settings.
I wonder if it worth removing the 'vendor' folder from the affected project and run the "composer install" again, would it do the trick?

0
评论操作 固定链接

Problem solved. It needed a composer self-update and reinstall of rector/rector with the latest composer version to enable the PHP wrapper generation by composer for PHP Versions < 8.0. 

0

请先登录再写评论。