Küçültülmüş CSS Git'te depolanmalı mı?


10

Üzerinde çalıştığım bir proje için SASS kodumdan küçültülmüş CSS oluşturmak için Gulp kullanıyorum.

Git'ten canlı yayın yaparken bu küçültülmüş CSS'yi yeniden oluşturmanın en iyi uygulama olup olmadığını merak ettim ...

veya

Küçültülmüş CSS dosyalarını Git'te depolamak için, sunucunun üzerinde daha fazla çalışma yapmadan otomatik olarak üretime aktarılsın mı?

İnsanların bu konudaki fikirlerini takdir ediyorum. Teşekkürler!


Sadece bir yer küçültülmüş css / js / etc var. should saklanabilir: /dev/null.
R .. GitHub BUZA YARDIMCI DURDUR

(Bunun nedeni, web sunucunuzun mükemmel bir şekilde gzip taşımacılığını kullanabilmesidir.)
R. .. GitHub DURDURMAK ICE

Hem sıkıştırılmış hem de sıkıştırılmamış CSS depolamak artık aynı şeyin iki sürümüne sahip olduğunuz anlamına gelir. Standart sürüm hangisidir? Bir geliştiricinin sıkıştırılmış CSS'yi ve diğerinin sıkıştırılmamış CSS'yi güncellediği senaryoyu tasarlamak kolaydır. İki varlığınız şimdi birbirinden ayrıldı. Tabii ki süreç bunu önlemelidir, ancak takımdaki yeni bir geliştirici ile gerçekçi bir olasılık.
Qwerky

Yanıtlar:


13

"Değişir." Normal gelişim takibi için hayır. Bununla birlikte, bulut ve DevOps dağıtımları için genellikle kullanışlı veya hatta gereklidir.

Çoğu zaman, @ptyx doğrudur . Gerçekten de, onun "hayır" ı biraz daha vurgulu olarak ifade edilebilirdi. "Hayır, hayır! Aman Tanrım! "

Küçültülmüş veya sıkıştırılmış varlıkları neden Git gibi kaynak kontrol sisteminde depolamıyorsunuz?

  1. Kaynak kodundan anında inşa süreciniz tarafından neredeyse önemsiz bir şekilde yeniden oluşturulabilirler. Sıkıştırılmış varlıkları depolamak temel olarak aynı mantıksal içeriği iki kez depolamaktır. "Kendinizi tekrarlama" (aka KURU ) ilkesini ihlal eder .

  2. Daha az felsefi ancak daha pratik bir neden, minimize edilmiş / optimize edilmiş varlıkların Git'te depolandığında çok düşük sıkıştırılabilirliğe sahip olmasıdır. Kaynak kontrol sistemleri, depolanan her dosyanın farklı sürümleri arasındaki değişiklikleri ("deltalar") tanıyarak çalışır. Bunu yapmak için, en son dosyayı bir önceki sürümle "farklılaştırırlar" ve bu deltaları dosyanın her sürümünün tam bir kopyasını saklamaktan kaçınırlar. Ancak küçült / optimize et adımında yapılan dönüşümler genellikle diff / delta algoritmalarının kullandığı benzerlikleri ve geçiş noktalarını kaldırır . En önemsiz örnek satır sonlarını ve diğer boşlukları kaldırmaktır; ortaya çıkan varlık genellikle sadece bir uzun satırdır. Web oluşturma sürecinin birçok bölümü - Babel , UglifyJS , Browserify ,Daha az ve Sass / SCSS - varlıkları agresif bir şekilde dönüştürün. Çıktıları rahatsız edici; küçük girdi değişiklikleri çıktıda büyük değişikliklere yol açabilir. Sonuç olarak, fark algoritması her seferinde neredeyse tamamen farklı bir dosya gördüğüne inanır. Sonuç olarak depolarınız daha hızlı büyüyecektir. Diskleriniz yeterince büyük olabilir ve ağlarınız büyük bir endişe yaratmayacak kadar hızlı olabilir, özellikle de küçültülmüş / optimize edilmiş varlıkları iki kez depolamanın bir değeri olsaydı - 1. noktaya dayanmasına rağmen, ekstra kopyalar sadece% 100 anlamsız olabilir kabartmak.

Ancak bunun büyük bir istisnası vardır: DevOps / bulut dağıtımları. Bir dizi bulut satıcısı ve DevOps ekibi Git'i ve benzerlerini yalnızca geliştirme güncellemelerini izlemek için değil, aynı zamanda uygulamalarını ve varlıklarını test ve üretim sunucularına aktif olarak dağıtmak için de kullanır. Bu rolde Git'in "hangi dosyalar değişti?" "her bir dosyada ne değişti?" Git, minimize edilmiş / optimize edilmiş varlıklar için neredeyse tam bir dosya kopyası yapmak zorundaysa, aksi halde olduğundan biraz daha uzun sürer, ancak her birinde "projedeki her dosyanın" bir kopyasını önlemeye yardımcı olan mükemmel bir iş olmadığı için önemli değildir. dağıtım döngüsü.

Git'i dağıtım motoru olarak kullanıyorsanız, küçültülmüş / optimize edilmiş öğelerin Git'te depolanması "hayır!" arzu edilir. Gerçekten de, konuşlandırdığınız sunucularda / hizmetlerde sağlam oluşturma / sonradan işleme fırsatlarına sahip değilseniz gerekli olabilir. (Bu durumda geliştirme ve dağıtım varlıklarının nasıl bölüneceği ayrı bir solucan kutucuğudur. Şimdilik, tek bir birleşik depo, birden çok dal, alt depo veya hatta birden çok örtüşen depo da dahil olmak üzere çeşitli yollarla yönetilebileceğini bilmek yeterlidir. )


1
Bunun için teşekkür ederim! Çok takdir etmek. Bunu daha iyi açıklandığı gibi cevap olarak işaretledim.
Connor Gurney

1
git sadece deltaları depolamaz. SVN kullanır, ancak git dosyaları depolamak için çok daha karmaşık bir mekanizma kullanır. Bazı insanlar her dosyanın tam bir kopyasını sakladığını söylüyor, ancak anladığım kadarıyla bu da yanlış. Kendisine tam olarak açık olmadığım için ne yaptığına girmeye çalışmam.
jpmc26

Bence nüansı sadece değiştirerek elde edebilirsiniz "ve sadece yeni deltaları" satırındaki bir şeye "saklayabilir ve dosyanın her versiyonunun eksiksiz bir kopyasını saklamaktan kaçınmak için bu deltaları kullanabilirsiniz. Bu sizin açınızdan bir şey ifade eder, gerçekte doğru olur ve herhangi bir kaynak kontrol sistemi için nasıl yapıldığı konusunu araştırmaktan kaçınır.
jpmc26

DevOps, konuşlandırılan sunucuda minimasyonu otomatik olarak tetiklemek ve her iki dünyanın en iyisini elde etmek için git kancalarını kullanabilir mi?
Buttle Butkus

@ButtleButkus Konuşlandırılan sunucuya bağlıdır. Direk kancalarına bağlı olarak, hedef üzerinde 1 / uygun transistörlerin, küçültücülerin ve optimize edicilerin var olduğunu varsaymanız veya direk kancalarını çalıştırmadan önce 2 / yüklemeniz gerekir. 1 / dir. 2 / her konuşlandırmaya bir yük maliyeti / gecikme yükler. Ayrıca yeni olası arıza modları ve uzak, opak, geçici bir ortamda post kancalarında hata ayıklama gereksinimi sunar. Uygun değil. Yani kancalar gümüş bir kurşun değildir. Varlıkları önceden dönüştürmek / optimize etmek yetersiz olabilir, ancak sağlam ve pragmatiktir.
Jonathan Eunice

17

Hayır.

Kaynak kontrolü yalnızca kaynak içermelidir. Kaynaktan oluşturulmuşsa, oraya ait değildir ve oluşturma işleminiz tarafından oluşturulmalıdır.

Ara yapı yapılarını kontrol etmek istememenizin temel nedeni, yaparsanız, çalıştırdığınız şeyin yeni değiştirdiğiniz kaynaktan veya yeniden inşa edemediğiniz bir ara üründen gelip gelmediğine güvenmenin gerçekten zor olmasıdır. .


3
Oluşturulan kodu, yürütülebilir kodu nasıl düşündüğünüzü düşünün.
candied_orange

3
Bu ilke her zaman doğru değildir. Bir kullanıcının sahip olmasını bekleyemeyeceğiniz ağır araçlarla oluşturulan dosyalarınız varsa, oluşturulan dosyaları git'e koymak mantıklı olabilir. Birçok kişi configurebu sebepten dolayı üretilen autoconf komut dosyalarını git'e bile koydu .
R .. GitHub BUZA YARDIMCI DURDUR

@R ..: İdeal olarak, bu şeyler için ayrı bir eser deposu bulundurursunuz, ancak gerçeklik nadiren idealdir.
Kevin

@ Taviz verebilirsiniz - ama bu sadece. Ve CSS minimizasyonu için, araçların 'ağır' veya 'yavaş' veya 'uygunsuz' olduğunu düşünmüyorum. Ayrıca, iyi çalışan ve oluşturulan kodu kaynak kontrolünüze koymanızı gerektirmeyen alternatif bağımlılık enjeksiyon mekanizmaları (maven, sarmaşık ...) vardır.
ptyx

1
@ButtleButkus Adanmışlar davasında çok fazla uzmanlığım yok. Gördüğüm git, sadece kaynak kontrolü yerine (çok kullanışlı ve esnek) bir taşıma / bırakma / yerleştirme mekanizması olarak kullanılıyor. 'Source' git ve 'delivery' git ayrı değilse (ayrı depolar veya ayrı dallar), bu, kaynak-> build-> teslim edilebilir zinciri bir şekilde tehlikeye atmanız gerektiği anlamına gelir - örneğin, kaynak koduna sahip üretim ile sonuçlanacaksınız ve etrafta yatan ekstra dallar ve kullanılmayan ikili ürünlerle geliştirme. Bu pragmatik bir uzlaşmadır, ancak endişeleri mümkün olduğunca ayırmayı tercih ederim.
ptyx
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.