Ketika saya memulai proyek M2 baru, hal pertama yang akan saya lakukan adalah menginstal inti melalui komposer:
composer create-project --repository-url=https://repo.magento.com/ magento/project-community-edition
Sekarang saya dapat menulis modul dan tema khusus saya di bawah app/code
. Saya kemudian akan menambahkan folder saya composer.*
dan seluruh app/code
ke VCS saya. Sejauh ini semuanya baik-baik saja.
Misalkan sekarang saya ingin menggunakan beberapa alat membangun untuk proyek saya, katakanlah Grunt atau Gulp.
Jika saya mengkomit saya sendiri
Gruntfile.js
, ini akan ditimpa olehmagento/magento2-base
paket ketika saya menjalankancomposer install
setelah saya mengkloning repo.Jika saya mengkomit
gulpfile.js
, saya tidak bisa mendefinisikan dependensi saya dalampackage.json
, karena itu juga akan ditimpa olehmagento/magento2-base
.Jika saya memutuskan untuk menggunakan pengaturan Grunt Magento dan ingin menyesuaikannya dengan mengedit file di bawah
/dev/tools/grunt
(misalnyathemes.js
), saya tidak bisa karena perubahan saya akan ditimpa olehmagento/magento2-base
.
Pemahaman saya adalah Anda tidak bisa berbuat banyak dalam root dokumen Anda. Tentu saja ada banyak solusi untuk masalah ini:
- Saya bisa menjalankan
git checkout -
hak setelah instalasi untuk mengatur ulang file saya sendiri - Saya bisa menyimpan file build saya di folder khusus,
/build
misalnya - Saya bisa menggunakan alat bangunan yang berbeda, seperti Phing, Ant, atau Rake (pengembang frontend saya tidak akan begitu senang)
- Saya bisa mengganti
magento/magento2-base
dengan paket khusus yang memiliki pemetaan khusus untuk file inti (tidak benar-benar optimal tapi hei, itu pilihan)
Saya pribadi tidak menyukai semua opsi ini, jadi saya ingin tahu apakah ada cara yang disukai atau lebih baik untuk mencapai apa yang saya coba lakukan.
Adakah yang mengalami masalah yang sama? Bagaimana Anda mengatasinya? Bagaimana Anda menyusun proyek Anda di bawah VCS?
MEMPERBARUI
Poin tambahan terkait dengan pengaturan proyek. Dalam percobaan saya, saya perhatikan bahwa pemasang komposer Magento memiliki bendera untuk penimpaan file:
"extra": {
"magento-force": "override"
}
Ini diperlakukan secara internal sebagai boolean jika saya tidak salah, jadi saya mencoba mengaturnya false
untuk melewati pengesampingan. Ketika saya menjalankan composer install
instalasi saya gagal karena file sudah ada. Pada dasarnya, jika saya tidak membiarkan Magento menimpa file saya, saya tidak dapat menginstalnya.
Apa tujuan dari bendera ini? Apakah hanya mengira melakukan cek untuk saya? Bagi saya tidak masuk akal untuk jujur, tapi mungkin seseorang bisa menjelaskan masalah ini.
sumber
Gruntfile.js
,gulpfile.js
danpackage.json
diselesaikan. Masalah yang dibahas dalam pertanyaan ini masih berlaku untuk versi Magento 2 yang lebih baru ketika Anda perlu mengubahthemes.js
,index.php
atau.htaccess
misalnya.Jawaban:
Jangka pendek, kami mencari untuk memisahkan file yang perlu kustomisasi. Misalnya jika orang perlu memodifikasi index.php, cari tahu cara memisahkan file standar yang dikirimkan Magento dari kebutuhan kustomisasi lokal. Setelah tercapai, dimungkinkan untuk memiliki "satu .gitignore sejati untuk semua proyek yang dapat digunakan". Yaitu, mudah untuk mengkomit direktori proyek secara keseluruhan ke Git dengan .gitignore dari semua yang akan "diambil oleh komposer" untuk Anda (dan semua "pembaruan komposer" akan diganti saat memasang tambalan atau peningkatan).
Jangka panjang, tujuannya adalah mempersingkat .gitignore sebanyak mungkin. Misalnya mendorong lebih banyak ke dalam modul di bawah direktori 'vendor'.
Kemudian
Dengan cara itu Anda masih dapat git melakukan seluruh pohon proyek dari atas ke bawah, mengambil file composer.json dan composer.lock (melakukan hanya aplikasi / kode tidak). .Gitignore akan mengecualikan direktori 'vendor' dan file lain yang tidak diinginkan.
Ini memberi Anda yang terbaik dari kedua dunia yang disebutkan dalam diskusi lainnya. Nyeri saat ini adalah panjang dan rumitnya file .gitignore, dan instalasi patch saat ini menghapus beberapa penyesuaian lokal (misalnya dalam index.php). Penanganan jangka pendek - hapus index.php dari .gitignore, dan ketika Anda menginstal tambalan periksa untuk melihat perubahan apa yang hilang (git diff) dan terapkan kembali secara manual.
sumber
"magento-force": "override"
bendera ini bisa berguna entah bagaimana. Saat ini tidak persis melakukan apa yang saya harapkan. Jika Anda mengedit / menambahindex.php
file "inti" Anda atau lainnya, Anda bisa memberi tahu Magento untuk tidak menimpa perubahan Anda. Apakah itu masuk akal?Ada Solusi mudah untuk mengatasi masalah Anda: jangan mengubah File inti;) Magento didasarkan pada memperpanjang Kode dan tidak mengubahnya.
Hal pertama adalah, Anda tidak harus meletakkan seluruh folder aplikasi / kode Anda dalam satu Repositori vcs. Setiap Komponen Magento (Modul, Tema, dll ...) harus merupakan repositori itu sendiri.
Jika Anda ingin mengubah / memperluas frontend, Anda harus membuat tema baru dan memperlakukan tema ini sebagai proyek kasar Anda, bukan seluruh Instance Magento2.
Untuk menginstal tema Anda di Proyek Anda, Anda dapat dengan mudah menariknya melalui komposer langsung dari repositori vcs Anda
sumber
app/code
folder itu ada khusus untuk menyesuaikan Magento. Pemahaman saya tentang M2 saat ini adalah yangapp/code
menggantikan apa yangapp/code/local
ada di M1, dan modul komunitas dapat diinstal melalui komposer di bawahvendor
. Kami memiliki beberapa proyek dengan sejumlah besar modul, dan beberapa tema juga. Apa yang Anda sarankan tidak mungkin dikelola.composer update
. Di mana Anda melakukancomposer.lock
itu? Jika Anda memiliki 10+ pengembang yang mengerjakan proyek yang sama, itu bisa menjadi sangat berantakan. Tentu saja kami memiliki banyak modul umum (dan bahkan tema) yang kami pasang melalui komposer, tetapi kode khusus proyek harus diversi versi di bawah repo yang sama demi kejelasan.git blame
ataugit log
ketika kode tersebar di beberapa komponen? Apakah Anda menjalankan tes integrasi untuk melihat bahwa semuanya berfungsi dengan baik?Ok, sepertinya saya menemukan solusi yang lebih baik untuk apa yang saya coba capai. Dalam
composer.json
, dimungkinkan untuk menentukan file mana yang harus diabaikan oleh Penginstal Kompas Magento. Jika saya tidak inginGruntfile.js
ditimpa, saya cukup menentukannya dengan konfigurasi berikut:Saya sekarang dapat memperluas instalasi standar agar sesuai dengan kebutuhan saya.
sumber
Sayangnya jawaban yang diterima, meskipun merupakan cara yang semula dimaksudkan untuk mencapai tujuan yang diinginkan, hanya berfungsi untuk mengecualikan file dan direktori yang ditempatkan di root, karena jika kita ingin mengecualikan file yang ditempatkan di subdirektori (mis.
dev/tools/grunt/configs/themes.js
, Diperlukan jika kita menambahkan tema baru dan ingin menggunakan tugas-tugas Magento Grunt), meletakkannya di konfigurasi "magento-deploy-diabaikan", itu memblokir penyebaran semua direktori induk (yaitu, dev dan semua subdirektori).Ini terjadi karena metode yang memproses "magento-deploy-ign" (
\MagentoHackathon\Composer\Magento\Deploystrategy\DeploystrategyAbstract::isDestinationIgnored
) gunakanstrpos
untuk mencocokkan jalur tujuan dengan daftar yang dikecualikan, sehingga setiap jalur induk akan selalu mengembalikan true.sumber
Menggunakan tambalan
Apa yang saya gunakan adalah membuat dan menerapkan tambalan. Saat kami perlu mengubah
dev/tools/grunt/configs/themes.js
,index.php
atau.htaccess
kami menerapkan perubahan pada salinan sementara file dan membuat tambalan darinya (buatbuild/
direktori terlebih dahulu):Kemudian kita dapat membuat tambalan ini berlaku secara otomatis saat menjalankan
composer install
atauupdate
dengan menambahkan perintah kescripts
bagiancomposer.json
file Anda :(Anda juga dapat menempatkan
patch ...
perintah di atas dalam skrip bash, katakanlahbuild/themes_patch.sh
dan panggil skrip itu dari Komposer sehingga akan dapat digunakan kembali atau dieksekusi secara manual)Tingkatkan keamanan! : D
Solusi ini pemutakhiran yang aman! Anda tidak mengubah file inti secara langsung tanpa menghormati file asli. Anda menerapkan tambalan ke file Magento2 asli. Ketika file itu berubah karena Anda meningkatkan, tambalan akan gagal dan Anda tahu bahwa Anda harus melihat lebih dekat ke perubahan baru dan membuat tambalan baru.
sumber