2017-07-26 16 views
8

Tôi đã phát triển một Máy chủ Web di động và tôi cũng đang tạo một bảng điều khiển di động để sử dụng Composer.Tạo sự kiện/plugin cho Composer

Tôi gặp sự cố. Tôi cần tạo plugin để thêm hành vi bổ sung vào Composer.

Tôi cần điều đó khi tải xuống bất kỳ gói nào với Composer, nó chỉnh sửa tập lệnh composer.json "của gói đó, để nó hoạt động trên bảng điều khiển di động.

Khi tải Laravel, ví dụ:

composer.json gốc:

{ 
    "name": "laravel/laravel", 
    ... 
    "scripts": { 
     "post-root-package-install": [ 
      "php -r \"file_exists('.env') || copy('.env.example', '.env');\"" 
     ], 
     ... 
    }, 
    ... 
} 

composer.json sửa cuối bởi plugin:

{ 
    "name": "laravel/laravel", 
    ... 
    "scripts": { 
     "post-root-package-install": [ 
      "F:/portable_php_path/php.exe -r \"file_exists('.env') || copy('.env.example', '.env');\"" 
     ], 
     ... 
    }, 
    ... 
} 
  • Lưu ý rằng một con đường vật lý có được tạo ra cho php.exe, bởi vì trong phiên bản di động nó có thể được trong bất kỳ đường dẫn.

(Câu hỏi của tôi là dành cho việc tạo ra các plugin nhà soạn nhạc. Tôi không có vấn đề chỉnh sửa composer.json với PHP.)

Tôi đọc hướng dẫn để tạo một plugin trên trang web nhà soạn nhạc, nhưng tôi bối rối. (https://getcomposer.org/doc/articles/plugins.md)

Nếu có cách khác để làm điều đó, nó cũng thú vị. Tôi chấp nhận các đề xuất và ý tưởng khác.

Nhờ bất kỳ ai có thể trợ giúp.

[Xin lỗi tôi xấu tiếng anh]

+1

bạn đã làm gì cố gắng? Bạn gặp phải vấn đề cụ thể nào và muốn được giúp đỡ? –

+1

Bạn có nhận thấy rằng chỉ có phần "tập lệnh" của gói gốc được thực thi không? Vì vậy, nó nên được định nghĩa trên cấp ứng dụng mà commandline/bất cứ điều gì kịch bản được thực hiện (trong trường hợp của bạn mà php thực thi được sử dụng). ví dụ. Phần script của Laravel không nên được thực hiện nếu nó là một dependency.see https://getcomposer.org/doc/articles/scripts.md#what-is-a-script- – P0rnflake

Trả lời

3

Tôi nghĩ rằng bạn có thể có một plugin thực hiện PluginInterfaceEventSubscriberInterface

public static function getSubscribedEvents() 
{ 
    return [ 
     'post-package-install' => 'onPostPackageInstall' 
     // hook post-package-install using onPostPackageInstall method 
    ]; 
} 

public function onPostPackageInstall(\Composer\Installer\PackageEvent $event) 
{ 
    $vendorDir = $event->getComposer()->getConfig()->get('vendor-dir') . '/'; 

    /** @var InstallOperation $item */ 
    foreach ($event->getOperations() as $item) { 

     $packageInstalled = $item->getPackage()->getName(); 
     // do any thing with the package name like `laravel/laravel` 
     //You can now edit the composer.json file 

     echo $vendorDir . $packageInstalled . '/composer.json'; 

    } 

} 
Các vấn đề liên quan