Magento 2: File Komposer Minimum

9

Saya telah melihat beberapa hal melayang di internet yang tidak kekal (yaitu Twitter) yang beberapa perubahan terbaru pada Magento 2 memungkinkan untuk memasang modul ke direktori vendor melalui komposer, dan Magento 2 akan melihat modul Anda tanpa ada tindakan bodoh yang menyatu. .

Jika ini benar, apakah ada file "minimum composer.json" mengambang untuk pengembang modul untuk digunakan dengan modul mereka agar pengguna Magento 2 menginstalnya ke dalam sistem mereka?

Alan Storm
sumber
Anda mungkin ingin melihatnya di github.com/magento/magento2/pull/1206 . Itu memungkinkan modul magento untuk hidup dalam vendor yang saya percaya.
Luke Rodgers

Jawaban:

6

Memperbarui

Sepertinya beberapa hal berubah dengan beberapa perubahan terbaru (7 Oktober) di cabang berkembang. Sekarang sepertinya memungkinkan untuk mendukung modul yang tinggal di direktori vendor.

Saya membuat dua contoh menginstal modul. Satu yang menyalin file ke aplikasi / kode dan yang lain yang mendaftar modul di mana ia berada di direktori vendor.

Strategi Salin: https://github.com/mttjohnson/magento2-sample-module-minimal-copy Strategi Registrasi: https://github.com/mttjohnson/magento2-sample-module-minimal-register

Untuk tujuan pengembangan saya pikir menggunakan strategi registrasi lebih berguna karena file yang sedang dijalankan oleh Magento dapat langsung dimodifikasi, diuji dan kemudian berkomitmen kembali ke modul repo.

Jawaban Asli

Jika Anda memiliki composer.jsonfile untuk paket komposer modul yang berisi jenis magento2-modulefile maka secara default akan disalin ke direktori yang dipetakan tertentu dalam app/codedirektori.

{
    "name": "vendorname/module-name",
    "type": "magento2-module",
    "require": {
        "magento/magento-composer-installer": "*"
    },
    "extra": {
        "map": [
            [
                "module",
                "VendorName/ModuleName"
            ]
        ]
    }
}

Dalam contoh ini composer.json nama paket komposer vendorname/module-nameakan menghasilkan file untuk paket komposer yang ditempatkan vendor/vendorname/module-name.

Jenis khusus magento2-modulediimplementasikan sebagai komposer-plugin dalam paket magento / magento-komposer-installer . Itu sebabnya saya telah mendaftarkannya di bagian yang diperlukan. Ini adalah komposer-plugin ini yang melakukan penyalinan file ke app/codedirektori magento yang sesuai .

The extra: {map: [["composerDir","MagentoDir"]]}bagian direferensikan oleh installer komposer-plugin untuk tahu apa bagian dari paket komposer Anda untuk memetakan apa bagian dari struktur direktori Magento Anda. Dalam contoh yang diberikan ini akan mengambil vendor/vendorname/module-name/moduledan menyalin file dari sana ke app/code/VendorName/ModuleName.

mttjohnson
sumber
apakah bagian peta di sini kan? Menurut pemahaman saya, permintaan tarik ini membuatnya sehingga Anda tidak perlu menggunakan plugin untuk menggunakan komposer dengan modul Magento - bahwa Magento akan mencari vendor sendiri. github.com/magento/magento2/pull/1206
Alan Storm
Membaca beberapa komentar di bagian bawah PR yang Anda sebutkan, sepertinya PR telah digabung tetapi tidak sepenuhnya mendukung modul yang hidup di folder vendor komposer.
mttjohnson
1

Sepertinya sesuatu seperti ini yang seharusnya melakukan trik.

{
    "name": "pulsestorm/module-name",
    "description": "A description of your extension",
    "authors": [
        {
            "name": "Robert Hoffner",
            "email": "[email protected]"
        }
    ],
    "require": {},
    "autoload": {
        "psr-4": {
            "Package\\Module\\": "src/path/to/Package/Module/Package/Module",
        },        
        "files": [
            "src/path/to/Package/Module/registration.php",
        ]
    }    
}

Kuncinya di sini adalah bagian autoloader. Ini mengatur autoloader PSR-4 yang menunjuk pada file kelas Anda, dan secara otomatis memuat file Anda registration.php. Ketika komposer menjatuhkan file dalam vendor dan membuat kembali file autoload, Magento harus dapat melihat modul Anda.

Satu efek samping yang rapi dari ini - kode tidak perlu lagi berada di app/code!

Alan Storm
sumber
Saya bingung dengan ini. Semua yang saya baca tentang membuat modul saya sendiri membuat saya meletakkan file saya di app / kode. 1) Bagaimana cara kerjanya dan 2) Mengapa ini rapi?
kevando