mkeremcansev vendor, node_modules gibi klasörler repoya gönderilmez. Bunlar install komutları (composer install
, npm install
) çalıştırıldığında çalıştırıldıkları ortamda o anlık kurulur. O yüzden sunucuda her zaman fresh halleri ile yer alırlar. Sizin yapacağınız değişiklik de kendi bilgisayarınızda kalmış olur.
composer update
, npm update
gibi komutlar sunucuda çalıştırılmaz. Bunlar geliştirme ortamında çalıştırılır. Bu komutlar çalıştığında lock dosyası oluştururlar. Bu dosyalarda kullanılan paketlerin tam olarak hangi sürümünün kurulacağı yazar. Geliştirme ortamında update yapıldıktan sonra bu dosyalar repoya gönderilir, sunucu da repodan çekerek kendini günceller. Sonra sunucuda install komutları çalıştırılır, lock dosyasındaki sürümler mevcut kurulu sürümlerden farklı ise o paketler güncellenir. Bu durumda sizin vendor klasöründe yaptığınız değişiklik güncellenen bir pakete denk gelirse o değişiklik de gider.
Geliştirme ortamındaki dosyaların canlı ortama kadar taşınma sürecine deployment denir. Bu sırada yapılan bu işlemler ise pipelines, webhooks... vs kullanılarak otomatikleştirilir. Deployment da dahil olmak üzere genel olarak ise bu otomatikleşmiş sistematik işleyişe CI/CD denir. Siz kodu repoya push'larsınız, gerisi otomatik yapılır.
Paylaşımlı hosting bunları öğrenmenizdeki en büyük engel, o yüzden forumda bir çok yerde paylaşımlı hosting konusunda soru yanıtlamadığımı belirttim. Yılda 2-3 bin TL sunuculara veremeyeceğini söyleyen arkadaşlar olabilir ama bu bilgiler onlara bu paranın 5-10 katı belki daha fazla maaşlı işler için, yurtdışı için kapı açacaktır. Bunu yazmamın sebebi, vendor klasöründe değişiklik yaptım diyen birisi paylaşımlı hosting, FTP vs eski usül şeyler kullanıyor demektir. vendor klasöründe değişiklik yapmanın mantıklı bir yolu yok mu peki? Var elbette:
- İlgili paketi fork'larsınız, gerekli değişiklikleri herkesin kullanabileceği şekilde düzenlersiniz ve pull request oluşturursunuz. Bir sorun yoksa ve paket sahibi uygun görürse sizin request'i kabul eder ve merge yapar. Paket güncellenir, yeni sürüm sürülür. Siz de
composer update
yaparsınız, hem paket sizin istediğiniz değişiklikle yüklenmiş olur hem de açık kaynak bir projeye katkı sağlamış olursunuz başkaları da faydalanmış olur.
- Pull request imkanı yoksa (paket terkedilmiş olabilir, read-only olabilir...) yine forklarsınız, değişikliği yaparsınız, packagist'te yayınlarsınız. Ana paket yerine composer.json dosyanıza kendi paketinizi işlersiniz. Başkaları da sizin paketi kullanabilir yine aynı şekilde fayda da sağlamış olursunuz.
- Packagist'e göndermek istemiyorsanız forkunuzu kendi projenizde bir klasöre clone alırsınız, composer ile yerel paketleri kullanma yolları var. O şekilde kullanırsınız.
push, pull, merge, pull request, fork, clone alma... nedir bilmiyorsanız git bilmiyorsunuz demektir. composer.json, composer-lock.json, packagist... vs bilmiyorsanız composer bilmiyorsunuz demektir. Deployment, CI/CD, docker vs... bilmiyorsanız DevOps konusunda bihabersiniz demektir. Ben bir şeyleri bu şekilde anlatıyorsam, bazı kelimeleri kalın, eğik vs yazıyorsam bunları öğrenmeniz gerekli, araştırmanız gerekli demektir.