承接 anandpilania/upgrader 相关项目开发

从需求分析到上线部署,全程专人跟进,保证项目质量与交付效率

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

anandpilania/upgrader

最新稳定版本:v0.0.2

Composer 安装命令:

composer require anandpilania/upgrader

包简介

Modular upgrade tool for Laravel, PHP, React, Vue, Tailwind, TypeScript, and JavaScript

README 文档

README

🎉 Now with Laravel 13 Support!

A comprehensive, modular upgrade tool for modern web development stacks. Automatically upgrade PHP, Laravel, React, Vue, Tailwind CSS, TypeScript, and JavaScript with intelligent dependency management.

🎯 Key Features

  • Modular Architecture - Each technology is an independent, pluggable module
  • Intelligent Dependencies - Modules automatically upgrade their dependencies
  • Multi-Framework Support - Works with Laravel, React, Vue, and more
  • Language Awareness - Handles JavaScript ↔ TypeScript transitions seamlessly
  • Auto-Detection - Automatically detects applicable modules in your project
  • Version-by-Version - Incremental upgrades for safety
  • Dry Run Mode - Preview changes before applying

📦 Available Modules

Module Description Dependencies
php PHP version upgrades None
javascript JavaScript/ES version upgrades None
typescript TypeScript upgrades javascript
laravel Laravel framework upgrades php
reactjs React.js upgrades javascript OR typescript
vuejs Vue.js upgrades javascript OR typescript
tailwindcss Tailwind CSS upgrades None

🔄 Dependency Flow

Laravel Module
  └─ depends on → PHP Module

React Module
  └─ depends on → JavaScript Module OR TypeScript Module
                       └─ depends on → JavaScript Module

Vue Module
  └─ depends on → JavaScript Module OR TypeScript Module
                       └─ depends on → JavaScript Module

TypeScript Module
  └─ depends on → JavaScript Module

🚀 Installation

composer require --dev anandpilania/upgrader

Or install globally:

composer global require anandpilania/upgrader

📘 Usage

List Available Modules

bin/upgrader modules

Output:

┌────────────┬─────────┬─────────────────────┬──────────────┬─────────────────┐
│ Module     │ Version │ Description         │ Dependencies │ Supported       │
├────────────┼─────────┼─────────────────────┼──────────────┼─────────────────┤
│ php        │ 1.0.0   │ PHP upgrade module  │ None         │ 7.4, 8.0, 8.1..│
│ laravel    │ 1.0.0   │ Laravel upgrades    │ php          │ 8.0, 9.0, 10.0..│
│ reactjs    │ 1.0.0   │ React.js upgrades   │ None         │ 16.0, 17.0, 18.0│
└────────────┴─────────┴─────────────────────┴──────────────┴─────────────────┘

Auto-Detect Project Modules

bin/upgrader detect

Output:

Detected Modules
├─ laravel (v9.0 → v11.0 available)
├─ php (v8.0 → v8.2 available)
├─ reactjs (v17.0 → v18.0 available)
└─ typescript (v4.5 → v5.0 available)

Analyze Upgrade Path

# Analyze specific module
bin/upgrader analyze --module=laravel --target=11.0

# Analyze all detected modules
bin/upgrader analyze

Upgrade a Module

# Basic upgrade
bin/upgrader upgrade --module=laravel --from=9.0 --to=11.0

# Auto-detect current version
bin/upgrader upgrade --module=laravel --to=11.0

# Upgrade with dependencies (e.g., PHP will be upgraded first)
bin/upgrader upgrade --module=laravel --to=11.0 --with-dependencies

# Dry run (preview changes)
bin/upgrader upgrade --module=laravel --to=11.0 --dry-run

🎯 Real-World Examples

Example 1: Upgrade Laravel (with PHP)

# Laravel module depends on PHP module
# When you upgrade Laravel, it will automatically upgrade PHP if needed

bin/upgrader upgrade --module=laravel --from=9.0 --to=11.0 --with-dependencies

What happens:

  1. Detects Laravel 9 requires PHP 8.0
  2. Detects Laravel 11 requires PHP 8.2
  3. Automatically upgrades PHP 8.0 → 8.2 first
  4. Then upgrades Laravel 9.0 → 10.0 → 11.0

Example 2: Upgrade React with TypeScript

# If your React project uses TypeScript, both will be upgraded

bin/upgrader upgrade --module=reactjs --from=17.0 --to=18.0 --with-dependencies

What happens:

  1. Detects React uses TypeScript
  2. Detects React 18 needs TypeScript 4.5+
  3. Automatically upgrades TypeScript if needed
  4. TypeScript upgrade triggers JavaScript target upgrade
  5. Then upgrades React 17.0 → 18.0

Example 3: Full Stack Upgrade

# Detect everything
bin/upgrader detect

# Upgrade each module
bin/upgrader upgrade --module=php --to=8.2
bin/upgrader upgrade --module=laravel --to=11.0 --with-dependencies
bin/upgrader upgrade --module=tailwindcss --to=3.4
bin/upgrader upgrade --module=vuejs --to=3.4 --with-dependencies

⚙️ Configuration

Create .upgrader.yml in your project root:

modules:
  laravel:
    update_frontend: true
    run_tests: true
    backup_database: true

  reactjs:
    migrate_to_hooks: true
    enable_strict_mode: true

  typescript:
    strict_mode: true
    update_types: true

  tailwindcss:
    enable_jit: true
    update_plugins: true

Then run:

bin/upgrader upgrade --module=laravel --config=.upgrader.yml

What happens automatically:

Step 1: Dependency Check
✓ Laravel 13 requires PHP 8.3
✓ Current PHP: 8.2
✓ Upgrading PHP 8.2 → 8.3 first

Step 2: PHP Upgrade
✓ Applied PHP 8.3 transformers
✓ Updated composer.json PHP requirement

Step 3: Laravel Upgrade
✓ Updated composer.json Laravel version
✓ Applied CSRF middleware transformer (VerifyCsrfToken → PreventRequestForgery)
  - Updated 12 files
✓ Applied cache config transformer
  - Added serializable_classes configuration
✓ Applied polymorphic pivot transformer
  - Found 3 pivot models
  - Generated warnings for manual review

Step 4: Frontend Detection
✓ Detected Vue.js 3.2
✓ Vue uses TypeScript
✓ Frontend upgrades available (not applied without --with-dependencies)

Summary:
✓ PHP 8.2 → 8.3
✓ Laravel 12.0 → 13.0
✓ 15 files modified
⚠ 5 manual steps required

Manual Steps:
1. Review config/cache.php - add whitelisted classes if caching objects
2. Check .env for CACHE_PREFIX and SESSION_COOKIE
3. Update JobAttempted event listeners ($exception instead of $exceptionOccurred)
4. Review 3 pivot models - add explicit $table if needed
5. Run: php artisan test

🏗️ Architecture

How Modules Work

Each module is self-contained and implements the UpgradeModuleInterface:

interface UpgradeModuleInterface {
    // Detect if this module applies to the project
    public function canHandle(string $projectPath): bool;

    // Detect current version
    public function detectCurrentVersion(string $projectPath): ?string;

    // Analyze upgrade compatibility
    public function analyze(string $projectPath, string $targetVersion): array;

    // Perform the upgrade
    public function upgrade(string $from, string $to): array;

    // Declare dependencies on other modules
    public function getDependencies(): array;
}

Dependency Resolution

The ModuleRegistry automatically resolves and initializes dependencies:

$registry = new ModuleRegistry();
$registry->register(new PHPModule());
$registry->register(new LaravelModule()); // depends on PHP

// When you upgrade Laravel, PHP is automatically checked and upgraded if needed

Module Communication

Modules can access their dependencies:

class LaravelModule extends AbstractModule {
    protected array $dependencies = ['php'];

    public function upgrade($from, $to): array {
        // Get PHP module instance
        $phpModule = $this->getDependency('php');

        // Check if PHP upgrade is needed
        $requiredPhpVersion = $this->getRequiredPhpVersion($to);
        if ($phpModule) {
            $phpModule->upgrade($current, $requiredPhpVersion);
        }

        // Continue with Laravel upgrade...
    }
}

🔌 Creating Custom Modules

Create your own upgrade module:

namespace App\Upgraders;

use Upgrader\Core\AbstractModule;

class CustomFrameworkModule extends AbstractModule
{
    protected array $dependencies = ['php', 'javascript'];

    public function getName(): string {
        return 'my-framework';
    }

    public function canHandle(string $projectPath): bool {
        return file_exists($projectPath . '/my-framework.json');
    }

    public function detectCurrentVersion(string $projectPath): ?string {
        // Detection logic
    }

    public function getAvailableVersions(): array {
        return ['1.0', '2.0', '3.0'];
    }

    public function upgrade(string $from, string $to): array {
        // Upgrade logic
    }
}

Register your module:

$loader = new ModuleLoader();
$registry = $loader->loadAllModules();
$registry->register(new CustomFrameworkModule());

📊 Module Details

PHP Module

Upgrades: 7.4, 8.0, 8.1, 8.2, 8.3, 8.4

Features:

  • Named arguments support
  • Union types migration
  • Attributes transformation
  • Enum support
  • Readonly properties
bin/upgrader upgrade --module=php --from=8.0 --to=8.2

Laravel Module

Upgrades: 8.0, 9.0, 10.0, 11.0, 12.0, 13.0

Dependencies: PHP

Features:

  • Route namespace removal (9.0)
  • Flysystem 3.x migration (9.0)
  • Native type declarations (10.0)
  • Application structure updates (11.0)
  • Request forgery protection updates (13.0)
  • Cache serialization security (13.0)
  • Auto-detects and upgrades frontend framework (React/Vue)
bin/upgrader upgrade --module=laravel --to=13.0 --with-dependencies

React Module

Upgrades: 16.0, 16.8, 17.0, 18.0, 19.0

Dependencies: JavaScript OR TypeScript (auto-detected)

Features:

  • Hooks migration (16.8)
  • JSX transform update (17.0)
  • Concurrent features (18.0)
  • Auto-detects TypeScript and upgrades if present
bin/upgrader upgrade --module=reactjs --to=18.0 --with-dependencies

Vue Module

Upgrades: 2.6, 2.7, 3.0, 3.1, 3.2, 3.3, 3.4

Dependencies: JavaScript OR TypeScript (auto-detected)

Features:

  • Composition API migration
  • Script setup transformation
  • Global API updates (3.0)
  • Auto-detects TypeScript and upgrades if present
bin/upgrader upgrade --module=vuejs --to=3.4 --with-dependencies

TypeScript Module

Upgrades: 4.05.4

Dependencies: JavaScript

Features:

  • Decorators support
  • Const type parameters
  • Automatically upgrades JavaScript target (ES2020, ES2022, etc.)
bin/upgrader upgrade --module=typescript --to=5.0 --with-dependencies

Tailwind CSS Module

Upgrades: 2.03.4

No Dependencies

Features:

  • JIT mode enablement
  • Color palette updates
  • Purge → Content migration
  • Deprecated class updates
bin/upgrader upgrade --module=tailwindcss --to=3.4

🧪 Testing

# Run all tests
composer test

# Test specific module
composer test -- --filter=LaravelModuleTest

🤝 Contributing

  1. Fork the repository
  2. Create your module in modules/your-module/
  3. Implement UpgradeModuleInterface
  4. Add tests
  5. Submit pull request

📝 License

MIT License

🙏 Credits

Built with ❤️ for the web development community.

Made modular, made simple.

Ready to upgrade to Laravel 13? Download and start upgrading!

统计信息

  • 总下载量: 0
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 0
  • 点击次数: 6
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 0
  • Watchers: 0
  • Forks: 0
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2026-04-06

承接程序开发

PHP开发

VUE

Vue开发

前端开发

小程序开发

公众号开发

系统定制

数据库设计

云部署

网站建设

安全加固