VCS kapsamında bir Magento 2 projesinin tercih edilen yapısı nedir?


15

Yeni bir M2 projesine başladığımda yapacağım ilk şey çekirdeği besteci ile kurmaktır:

composer create-project --repository-url=https://repo.magento.com/ magento/project-community-edition

Şimdi özel modüllerimi ve temalarımı altına yazabiliyorum app/code. Daha sonra benim composer.*ve tüm app/codeklasörü VCS'ime eklerdim. Şimdiye kadar her şey yolunda.

Şimdi varsayalım, projem için bazı oluşturma araçları kullanmak istiyorum, diyelim ki Grunt veya Gulp.

  1. Eğer kendimi taahhüt edersem, repoyu klonladıktan sonra koştuğumda bu paketin Gruntfile.jsüzerine yazılacak .magento/magento2-basecomposer install

  2. Eğer taahhüt gulpfile.jsedersem, a bağımlılıklarını gerçekten tanımlayamıyorum package.json, çünkü bunun üzerine de yazılacaktı magento/magento2-base.

  3. Magento'nun Grunt kurulumunu kullanmaya karar verir ve /dev/tools/grunt(örn. themes.js) Altındaki dosyaları düzenleyerek özelleştirmek istersem, yapamam çünkü değişikliklerimin üzerine yazılır magento/magento2-base.

Anladığım kadarıyla belge kökünde gerçekten fazla bir şey yapamazsınız. Elbette bu soruna birçok çözüm var:

  • git checkout -Kendi dosyalarımı sıfırlamak için kurulumdan hemen sonra çalıştırabilirim
  • Yapı dosyalarımı özel bir klasörde saklayabilirim, /buildörneğin
  • Phing, Ant veya Rake gibi farklı bir oluşturma aracı kullanabilirdim (ön uç geliştiricilerim o kadar mutlu olmazdı)
  • magento/magento2-baseTemel dosyalar için özel bir eşleme olan özel bir paketle değiştirebilirim (gerçekten optimal değil ama hey, bu bir seçenek)

Kişisel olarak tüm bu seçeneklerden hoşlanmıyorum, bu yüzden yapmaya çalıştığım şeyi elde etmenin tercih edilen veya daha iyi bir yolu olup olmadığını bilmek istiyorum.

Aynı problemi olan var mı? Bunu nasıl çözdün? Projenizi VCS altında nasıl yapılandırıyorsunuz?

GÜNCELLEME

Proje kurulumuyla ilgili ekstra bir nokta. Deneylerimde Magento besteci yükleyicisinin dosya geçersiz kılma için bir bayrağı olduğunu fark ettim:

"extra": {
    "magento-force": "override"
}

Eğer yanılmıyorsam dahili olarak bir boole olarak kabul edilir, bu yüzden falsegeçersiz kılmayı atlamak için ayarlamaya çalıştım . Çalıştırdığımda composer install, dosya (lar) zaten mevcut olduğu için kurulumum başarısız oluyor. Temel olarak, Magento'nun dosyalarımı geçersiz kılmasına izin vermezsem, yükleyemem.

O zaman bu bayrağın amacı nedir? Sadece benim için bir çek yapmak mı gerekiyor? Dürüst olmak benim için pek mantıklı değil, ama belki birisi konuya ışık tutabilir.


Başkalarının cevap olarak ne gönderdiğini merak ediyorum. İdeal olarak, Magento Core'u ana depomuzun dışında tutmak ve bunu sadece oluşturduğumuz şablon ve eklediğimiz veya eklediğimiz özel eklentilerle sınırlı tutmak istediğimizi düşünüyorum. Daha sonra derleme zamanında çekirdek + proje depomuza referans veriyoruz ve depolardan bir uygulama yapaylığı oluşturuyoruz. Bu son zamanlarda M1 için kullandığım yöntem ve Magento'nun resmi tavsiyesinin, Composer'ın tamamen desteklendiği için M2 ile benzer bir şey yapmak olup olmadığını merak ediyorum.
Bryan 'BJ' Hoffpauir Jr.

Daha yeni M2 sürümlerinde Gruntfile.js, gulpfile.jsve package.jsonsorunu çözülmüştür. Bu soruda ele alınan sorun themes.js, örneğin değiştirmeniz gerektiğinde index.phpveya daha yeni Magento 2 sürümleri için de geçerlidir .htaccess.
7ochem

Yanıtlar:


4

Kısaca, özelleştirme gerektiren dosyaları ayırmak istiyoruz. Örneğin, index.php dosyasının değiştirilmesi gerekiyorsa, Magento tarafından gönderilen standart dosyanın yerel özelleştirmelerden nasıl ayrıldığını öğrenin. Bir kez elde edildiğinde, "tüm projeler için bir gerçek .gitignore" sahip olmak mümkündür. Yani, tüm proje dizinini Git'e, "besteci yüklemesi" sizin için getirecek her şeyin .gitignore ile işlemek kolaydır (ve bir yama veya yükseltme yüklerken "besteci güncellemesi" her şey yerini alacak).

Daha uzun vadede, amaç .gitignore'u mümkün olduğunca kısaltmaktır. Örneğin, "satıcı" dizini altındaki modüllere daha fazla bilgi aktarın.

Sonra

  1. Projeler arasında paylaşmak istemediğiniz her şey için, uygulamayı uygulama / kod altında bırakın ve ana proje deposuna bağlı kalın.
  2. Yerel olarak geliştirilen her şey, projeler arasında daha kolay paylaşmak, ayrı bir GIT repo koymak ve 'satıcı' altına gelmek için besteci aracılığıyla yüklemek istediğiniz. (Yerel bir besteci repo olabilir veya doğrudan GIT'den yükleyin.)

Bu şekilde gitmeye devam edebilirsiniz, tüm proje ağacını yukarıdan aşağıya doğru tamamlayabilirsiniz, composer.json ve composer.lock dosyalarını yakalar (sadece uygulama / kod uygulanmaz). .Gitignore 'satıcı' dizinini ve istenmeyen diğer dosyaları hariç tutar.

Bu size diğer tartışmada bahsedilen her iki dünyanın en iyisini verir. Mevcut ağrı .gitignore dosyasının uzunluğu ve karmaşıklığıdır ve düzeltme eki yüklemesi şu anda bazı yerel özelleştirmeleri siler (örn. İndex.php'de). Kısa vadeli geçici çözüm - index.php dosyasını .gitignore'dan kaldırın ve yama değişikliklerini yüklediğinizde hangi değişiklikleri kaybettiğinizi (git diff) görmek ve bunları manuel olarak yeniden uygulamak için yama kontrolü yapın.


Tamam, bu yüzden yakın gelecekte bazı şeyleri değiştireceksiniz, güzel! Bu "magento-force": "override"bayrağın bir şekilde faydalı olup olmadığını merak ediyorum . Şu anda tam olarak beklediğim şeyi yapmıyor. index.phpDosyalarınızı veya diğer "çekirdek" dosyalarınızı düzenlediyseniz / genişlettiğinizde Magento'ya değişikliklerinizin üzerine yazmamasını söyleyebilirsiniz. Bir anlam ifade ediyor mu?
fmrng

3

Geçersiz kılma işleminiz için kolay bir çözüm var Sorun: çekirdek Dosyaları değiştirmeyin;) Magento, Kodu genişletmeye ve değiştirmemeye dayanır.

İlk olarak, tüm uygulama / kod klasörünüzü tek bir vcs deposuna koymamalısınız. Her Magento Bileşeni (Modül, Tema, vb.) Bir havuz olmalıdır.

Ön ucu değiştirmek / genişletmek istiyorsanız, yeni bir tema oluşturmalı ve bu temayı tüm Magento2 Eşgörünümü değil, homurdanma projeniz olarak değerlendirmelisiniz.

Temanızı Projenize yüklemek için doğrudan vcs deponuzdan besteci aracılığıyla kolayca çekebilirsiniz.


Eh, app/codeklasör Magento özelleştirmek için özel olarak vardır. Şu anki M2 anlayışım M1'de app/codeolanın yerini alıyor app/code/localve topluluk modülleri altında besteci ile kurulabilir vendor. BÜYÜK sayıda modüle sahip bazı projelerimiz ve birkaç temamız da var. Önerdiğiniz şeyi yönetmek imkansız olacaktır.
fmrng

Hey, 100'den fazla bileşenli projeleri bu şekilde yönetiyoruz. Anahtar, modülleri küçük tutmak ve modüller arasındaki besteci bağımlılıklarınızı yönetmektir. Magento proje havuzunu kendi ihtiyaçlarınız için klonlayabilir ve tüm bileşenlerinizi projenize ekleyebilirsiniz
David Verholen

Mevcut kurulumunuzdan memnunsanız sorun yok. Dürüst olmak gerekirse, oldukça hantal buluyorum. Bu, 100'den fazla git deposuna sahip olduğunuz anlamına gelir ve her şeyi değiştirdiğinizde belirli bir projeyi açmanız, değişikliklerinizi gerçekleştirmeniz, çalıştırmanız gerekir composer update. O zaman nerede iş yapıyorsun composer.lock? Aynı projede çalışan 10+ geliştiriciniz varsa, gerçekten dağınık olabilir. Tabii ki besteci aracılığıyla yüklediğimiz birçok genel modüle (ve hatta temele) sahibiz, ancak netlik için projeye özel kod aynı repo altında sürümlendirilmelidir.
fmrng

Yanlış yaptığınızı söylemiyorum, bence zevkime göre biraz karmaşık. İlgisiz, repo geçmişinizi böyle bir kurulumla nasıl inceliyorsunuz? Kod birden çok bileşene dağılmış gibi git blameveya git logne zaman özellikleri kullanabilirsiniz ? Her şeyin yolunda gittiğini görmek için entegrasyon testleri yapıyor musunuz?
fmrng

Bu tartışmayı geçen yıl dahili olarak yaptık ve konuşmalar 1repo = 1module yapmaya karar verdiğimiz için oldukça basitleşti. Önemli olan, küçük bir değişiklik için besteci güncellemesi yapmayacağınızdır. Geliştiriciler geliştirici ortamlarında çalışır ve oradaki dosyaları doğrudan değiştirir. Tamamlandığında, alfa, beta veya sürüm adayı olarak etiketleyebilirler. Bu şekilde, birkaç geliştirici aynı anda birçok projede çalışabilir ve bir dahaki sefere, tüm değişiklikleri çektiğiniz bir besteci güncellemesi yaparsınız.
Vcs

2

Tamam, başarmaya çalıştığım şey için daha iyi bir çözüm bulduğum anlaşılıyor. 'De composer.jsonMagento Composer Installer tarafından hangi dosyaların göz ardı edilmesi gerektiğini belirtmek mümkündür. Gruntfile.jsGeçersiz kılınmamı istemiyorsam , aşağıdaki yapılandırma ile belirtebilirim:

"extra": {
    "magento-deploy-ignore": {
        "magento/magento2-base": [
            "/Gruntfile.js",
            "/package.json"
        ]
    }
}

Artık standart kurulumu kendi ihtiyaçlarıma göre genişletebiliyorum.


Bu çözüm "yükseltme güvenli" görünmüyor. Magento yok saydığınız bu dosyalarda değişiklik yapacaksa, bu dosyaları bilmezsiniz veya unutursunuz. Bu yeni değişiklikleri asla içermeyecek olan kendi sürümünüzü kullanıyorsunuz. Lütfen önerim için cevabımı kontrol et.
7ochem

2

Maalesef kabul cevap, yolu başlangıçta biz mesela. (Bir alt dizinine yerleştirilen bir dosyayı dışında tutmak istiyorsanız, çünkü istenen hedefe, kök yerleştirilir dosyaları ve dizinleri hariç sadece işi başarmak amacını taşıdığı halde dev/tools/grunt/configs/themes.jsbiz eklerseniz, gerekli yeni tema ve Magento Grunt görevlerini kullanmak istiyorum, "magento-deploy-ignore" yapılandırmasına koyarak, tüm üst dizinlerin (yani dev ve tüm alt dizinlerinin) dağıtımını engeller.

Bunun nedeni, "magento-deploy-ignore" ( \MagentoHackathon\Composer\Magento\Deploystrategy\DeploystrategyAbstract::isDestinationIgnored) yöntemini işleyen yöntemin strposhedef yolunu hariç tutulanlar listesiyle eşleştirmek için kullanmasıdır , böylece her üst yol her zaman true değerini döndürür.


Biliyorum, testlerimde görebiliyordum, ancak farklı bir yapı iş akışı kullandığımız için bizim için iyi çalışıyor. Daha iyi bir seçenek bulabilir misiniz?
fmrng

Boru hattımızın oluşturma aşamasında dosyaların teslim alınmasına başladık, sonra tüm yerleşik Grunt görevlerinde kullanmayı bıraktık, bu yüzden bir sorun değil.
Gennaro Vietri

Bu arada, "magento-deploy-ignore" davranışını geliştirmek için çatal magento-composer-installer'ı değerlendirmeye başladık, sorun tekrar ortaya çıkarsa bu yolu takip edebiliriz
Gennaro Vietri

0

Yamaları kullanma

Kullandığım yamalar oluşturmak ve uygulamak. Biz değişiklikten gerektiğinde dev/tools/grunt/configs/themes.js, index.phpya .htaccessbiz dosyanın geçici bir kopyasını değişiklikleri uygulamak ve bunun dışında bir yama oluşturmak (a oluşturmak build/ilk dir):

$ cp dev/tools/grunt/configs/themes.js dev/tools/grunt/configs/themes.js.tmp
  # Now Make changes in .tmp file
$ diff -u3 dev/tools/grunt/configs/themes.js dev/tools/grunt/configs/themes.js.tmp | sed 's/\.tmp//' > build/themes.patch
$ mv dev/tools/grunt/configs/themes.js.tmp dev/tools/grunt/configs/themes.js

Ardından, bu yamanın çalışırken composer installveya dosyanızın bölümüne updatete komutları ekleyerek otomatik olarak uygulanmasını sağlayabiliriz :scriptscomposer.json

{
    "scripts": {
        "post-install-cmd": "patch -i build/themes.patch dev/tools/grunt/configs/themes.js",
        "post-update-cmd": "patch -i build/themes.patch dev/tools/grunt/configs/themes.js"
    }
}

(Ayrıca yukarıdaki patch ...komutu bir bash betiğine koyabilirsiniz , diyelim kibuild/themes_patch.sh ve bu betiği Composer'dan çağırabilirsiniz, böylece yeniden kullanılabilir veya manuel olarak çalıştırılabilir)

Güvenli yükseltme! : D

Bu çözüm yükseltme güvenli! Özgün dosyalara saygı duymadan çekirdek dosyaları doğrudan değiştirmezsiniz. Özgün Magento2 dosyasına bir düzeltme eki uyguluyorsunuz. Yükselttiğiniz için bu dosya değiştiğinde, düzeltme eki başarısız olur ve yeni değişikliklere daha yakından bakmanız ve yeni bir düzeltme eki oluşturmanız gerektiğini bilirsiniz.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.