Pilih file mana yang akan diinstal melalui Komposer berdasarkan versi Magento

11

Akan sangat nyaman untuk memasukkan beberapa versi kode dalam modul composer dan membuat komposer menentukan versi mana yang akan digunakan, berdasarkan versi Magento dari target instalasi.

Misalnya, untuk Magento> 1.7, gunakan system.xml yang mencakup tooltip, bersarang, groupdan fitur-fitur modern lainnya tetapi untuk versi Magento yang lebih lama, gunakan versi file yang dipreteli yang tidak termasuk deklarasi (melanggar) tersebut.

Pendekatan ini dapat bekerja untuk banyak file lain dalam struktur modul standar juga.

Pilihan untuk penyebaran komposer adalah map, modmanatau package.xmlAFAIK, tidak ada yang memiliki kecerdasan mengenai sistem target. The package.xmlpilihan adalah sangat tidak mungkin untuk berubah, tapi mapbisa ...

Tampaknya bagi saya bahwa akan ada banyak pengembang ekstensi yang akan mendapat manfaat dari pendekatan degradasi yang anggun. Adakah yang menemukan solusi untuk ini?

Jonathan Day
sumber

Jawaban:

8

Saya belum memiliki solusi dan itu belum menjadi masalah bagi saya, tetapi saya memiliki proposal yang dapat bekerja:

  1. Anda perlu mempertahankan cabang versi terpisah untuk menargetkan berbagai versi Magento. Menyebarkan file yang berbeda dalam versi yang sama tergantung pada beberapa sihir komposer tidak akan berfungsi dengan baik. Jadi ekstensi Anda dapat memiliki 1.xcabang untuk kompatibilitas dengan versi Magento yang lebih lama (misalnya hingga 1,6) dan 2.xcabang untuk versi yang lebih modern. Tambahkan tag versi sesuai. Tentu saja Anda dapat mempertahankan cabang sebanyak yang Anda inginkan dan menulis kode terbaik untuk setiap versi Magento tetapi IMHO ini tidak sepadan dengan usaha dan satu cabang "modern" dan satu "warisan" sudah cukup. Terserah Anda, seberapa jauh Anda ingin kompatibel dengan cabang "modern", bahkan bisa menjadi versi minor terbaru.
  2. Tambahkan persyaratan untuk Magento seperti ini:

    "require": {
        "magento/magento-ce": "1.4-1.7"
    }

    dan

    "require": {
        "magento/magento-ce": ">=1.8"
    }
  3. Sekarang tiba sisi buruknya, bagian di mana Anda tidak memiliki pengaruh penuh lagi: Tidak ada magento/magento-cepaket resmi , sehingga pengguna ekstensi Anda mungkin akan menginstal Magento dari cermin yang dikelola komunitas seperti https://github.com/firegento/magento -ce atau dari repositori mereka sendiri. Ini harus menggantimagento/magento-ce paket "virtual" dari versi yang sama (ada place . self konversi , sehingga Anda tidak perlu menyesuaikan composer.json untuk setiap pembaruan versi):

    "replace": {
        "magento/magento-ce": "self.version"
    }

Ini hanya akan bekerja dengan baik jika konvensi di atas diterima secara luas dan hanya untuk pengguna yang benar-benar menginstal Magento sendiri melalui ketergantungan komposer, yang mungkin bukan mayoritas.

Jadi pendekatan yang lebih realistis adalah dengan hanya mengikuti langkah 1 dan menyarankan pengguna Anda untuk memerlukan cabang / versi utama yang berbeda, jika mereka menjalankan versi Magento lebih tua dari 1.x.

Fabian Schmengler
sumber