โครงสร้างที่ต้องการของโครงการ Magento 2 ภายใต้ VCS คืออะไร?


15

เมื่อฉันเริ่มโครงการ M2 ใหม่สิ่งแรกที่ฉันจะทำคือติดตั้งคอร์ผ่านทางผู้แต่ง:

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

ตอนนี้ฉันสามารถเขียนโมดูลและธีมที่กำหนดเองของฉันapp/codeได้ที่ด้านล่าง ฉันจะเพิ่มโฟลเดอร์ของฉันcomposer.*และapp/codeโฟลเดอร์ทั้งหมดลงใน VCS ของฉัน จนถึงทุกอย่างก็โอเค

สมมติว่าตอนนี้ฉันต้องการใช้เครื่องมือสร้างสำหรับโครงการของฉันสมมติว่า Grunt หรืออึก

  1. ถ้าฉันทำเองGruntfile.jsสิ่งนี้จะถูกเขียนทับโดยmagento/magento2-baseแพ็คเกจเมื่อฉันวิ่งcomposer installหลังจากฉันลอกแบบ repo

  2. ถ้าฉันกระทำของฉันgulpfile.jsฉันไม่สามารถจริงๆกำหนดอ้างอิงของฉันในเพราะมันก็จะถูกเขียนทับโดยpackage.jsonmagento/magento2-base

  3. ถ้าผมตัดสินใจที่จะใช้การตั้งค่าฮึดฮัดวีโอไอพีและต้องการปรับแต่งได้โดยการแก้ไขไฟล์ที่อยู่ภายใต้/dev/tools/grunt(เช่นthemes.js) magento/magento2-baseผมไม่ได้เพราะการเปลี่ยนแปลงของฉันจะถูกเขียนทับโดย

ความเข้าใจของฉันคือคุณไม่สามารถทำอะไรได้มากในรูทเอกสารของคุณ มีวิธีแก้ไขปัญหานี้มากมาย:

  • ฉันสามารถเรียกใช้งานได้git checkout -ทันทีหลังจากการติดตั้งเพื่อรีเซ็ตไฟล์ของฉันเอง
  • ฉันจะเก็บสร้างไฟล์ของฉันในโฟลเดอร์เฉพาะ/buildตัวอย่างเช่น
  • ฉันสามารถใช้เครื่องมือสร้างที่แตกต่างกันเช่น Phing, Ant หรือ Rake (ส่วนหน้าของฉันจะไม่มีความสุขเลย)
  • ฉันสามารถแทนที่magento/magento2-baseด้วยแพ็คเกจแบบกำหนดเองที่มีการแมปแบบกำหนดเองสำหรับไฟล์หลัก (ไม่ดีที่สุด แต่จริงๆแล้วมันเป็นตัวเลือก)

ฉันไม่ชอบตัวเลือกทั้งหมดเหล่านี้เป็นการส่วนตัวดังนั้นฉันจึงอยากทราบว่ามีวิธีที่ต้องการหรือดีกว่าเพื่อให้บรรลุสิ่งที่ฉันพยายามทำ

ทุกคนมีปัญหาเดียวกันหรือไม่ คุณแก้ปัญหาอย่างไร คุณจัดโครงสร้างโครงการภายใต้ VCS อย่างไร

UPDATE

จุดพิเศษที่เกี่ยวข้องกับการตั้งค่าโครงการ ในการทดลองของฉันฉันสังเกตเห็นว่าตัวติดตั้งตัวแต่ง Magento มีการตั้งค่าสถานะสำหรับการแทนที่ไฟล์:

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

มันได้รับการปฏิบัติภายในเป็นบูลีนถ้าฉันไม่ผิดดังนั้นฉันพยายามตั้งfalseให้ข้ามการเอาชนะ เมื่อฉันเรียกใช้composer installการติดตั้งของฉันล้มเหลวเนื่องจากไฟล์มีอยู่แล้ว โดยทั่วไปถ้าฉันไม่ปล่อยให้วีโอไอพีแทนที่ไฟล์ของฉันฉันจะติดตั้งไม่ได้

ธงชาตินี้มีจุดประสงค์อะไร? เป็นเพียงสมมติให้ฉันตรวจสอบ? มันไม่สมเหตุสมผลสำหรับฉันที่จะซื่อสัตย์ แต่บางทีใครบางคนสามารถส่องแสงในเรื่อง


ฉันอยากรู้ว่าคนอื่นโพสต์เป็นคำตอบอย่างไร ฉันคิดว่าเราต้องการกำจัด Magento Core จาก repo หลักของเราและ จำกัด ให้เหลือเพียงเทมเพลตที่เราสร้างและปลั๊กอินแบบกำหนดเองใด ๆ ที่เราเพิ่มหรือถูกต้อง จากนั้นในเวลาสร้างเราอ้างอิง core + repo โครงการของเราและสร้างสิ่งประดิษฐ์ของแอปพลิเคชันจากที่เก็บ นี่เป็นวิธีที่ฉันใช้กับ M1 เมื่อเร็ว ๆ นี้และฉันสงสัยว่าคำแนะนำอย่างเป็นทางการจาก Magento คือการทำสิ่งที่คล้ายกับ M2 ตอนนี้ที่นักแต่งเพลงได้รับการสนับสนุนอย่างเต็มที่
Bryan 'BJ' Hoffpauir Jr.

ในรุ่นใหม่ M2 ที่Gruntfile.js, gulpfile.jsและpackage.jsonปัญหาได้รับการแก้ไข ปัญหาการแก้ไขในคำถามนี้ยังคงมีผลบังคับใช้กับวีโอไอพีรุ่นใหม่รุ่นที่ 2 เมื่อคุณจำเป็นต้องมีการเปลี่ยนแปลงthemes.js, index.phpหรือ.htaccessตัวอย่างเช่น
7ochem

คำตอบ:


4

ในระยะสั้นเราต้องการแยกไฟล์ที่ต้องการการปรับแต่ง เช่นถ้าผู้คนต้องการแก้ไข index.php ให้หาวิธีแยกไฟล์มาตรฐานที่วีโอไอพีส่งมาจากความต้องการของการปรับแต่งในท้องถิ่น เมื่อทำได้สำเร็จเป็นไปได้ที่จะมี ".itignore ที่แท้จริงหนึ่งรายการสำหรับทุกโครงการที่สามารถใช้" นั่นคือง่ายต่อการส่งไดเรกทอรีโครงการทั้งหมดไปยัง Git ด้วย. gignignore ของทุกสิ่งที่ "การติดตั้งผู้แต่ง" จะดึงข้อมูลให้คุณ (และทุกอย่าง "การอัปเดตผู้แต่ง" จะแทนที่เมื่อติดตั้งแพทช์หรืออัพเกรด

ในระยะยาวเป้าหมายคือลด. gitignore ให้มากที่สุด เช่นเพิ่มโมดูลเข้าไปในโมดูลภายใต้ไดเรกทอรี 'ผู้ขาย'

แล้วก็

  1. สำหรับทุกสิ่งที่คุณไม่ต้องการแบ่งปันข้ามโครงการให้วางไว้ภายใต้แอพ / รหัสและมุ่งมั่นใน repo โครงการหลัก
  2. ทุกสิ่งที่พัฒนาในพื้นที่ที่คุณต้องการแบ่งปันในโครงการต่างๆได้ง่ายขึ้นใส่ GIT repo แยกต่างหากและติดตั้งผ่านทางผู้แต่งเพลงเพื่อให้มันกลายเป็น 'ผู้ขาย' (อาจเป็น repo นักแต่งเพลงท้องถิ่นหรือเพียงติดตั้งตรงจาก GIT)

ด้วยวิธีนี้คุณยังสามารถคอมไพล์ทรีโครงการทั้งหมดจากบนลงล่างจับไฟล์ composer.json และ composer.lock (การคอมไพล์เพียงแอพ / โค้ดไม่ได้) . gitignore จะแยกไดเรกทอรี 'ผู้ขาย' และไฟล์อื่น ๆ ที่ไม่ต้องการ

สิ่งนี้จะช่วยให้คุณได้รับสิ่งที่ดีที่สุดจากทั้งสองโลกในการสนทนาอื่น ความเจ็บปวดในปัจจุบันคือความยาวและความซับซ้อนของไฟล์. gignignore และการติดตั้งโปรแกรมแก้ไขจะกำจัดการปรับแต่งเฉพาะที่ (เช่นใน index.php) วิธีแก้ปัญหาระยะสั้น - ลบ index.php จาก. gitignore และเมื่อคุณติดตั้งการตรวจสอบโปรแกรมแก้ไขเพื่อดูการเปลี่ยนแปลงที่คุณทำหายไป (git diff) และนำไปใช้ใหม่ด้วยตนเอง


ตกลงดังนั้นคุณจะเปลี่ยนบางสิ่งที่นั่นในอนาคตอันใกล้ดี! ฉันสงสัยว่า"magento-force": "override"ธงนี้อาจมีประโยชน์หรือไม่ ในขณะนี้มันไม่ได้ทำสิ่งที่ฉันคาดหวัง ในกรณีที่คุณแก้ไข / ขยายindex.phpไฟล์ "แกน" หรืออื่น ๆ ของคุณคุณสามารถบอก Magento ได้ว่าอย่าเขียนทับการเปลี่ยนแปลงของคุณ มันสมเหตุสมผลไหม?
fmrng

3

มีวิธีแก้ปัญหาที่ง่ายสำหรับปัญหาการแทนที่ของคุณ: อย่าเปลี่ยนไฟล์หลัก;) วีโอไอพีจะยึดตามการขยายรหัสและไม่เปลี่ยนแปลง

สิ่งแรกคือคุณไม่ควรใส่ทั้งโฟลเดอร์ app / code ในที่เก็บ vcs เดียว แต่ละส่วนประกอบวีโอไอพี (โมดูลธีม ฯลฯ ... ) ควรเป็นที่เก็บข้อมูล

หากคุณต้องการเปลี่ยน / ขยายส่วนหน้าคุณควรสร้างชุดรูปแบบใหม่และถือว่าชุดรูปแบบนี้เป็นโครงการที่น่ากลัวของคุณไม่ใช่ Magento2 Instance ทั้งหมด

ในการติดตั้งชุดรูปแบบของคุณในโครงการของคุณคุณสามารถดึงมันผ่านทางผู้แต่งโดยตรงจากที่เก็บ vcs ของคุณ


ดีapp/codeโฟลเดอร์เป็นพิเศษมีการปรับแต่งวีโอไอพี ความเข้าใจของฉันของ M2 ปัจจุบันคือว่าapp/codeแทนที่สิ่งที่app/code/localอยู่ใน M1 vendorและโมดูลชุมชนสามารถติดตั้งผ่านทางนักแต่งเพลงภายใต้ เรามีบางโปรเจ็กต์ที่มีโมดูลจำนวนมากและหลายธีมเช่นกัน สิ่งที่คุณแนะนำจะเป็นไปไม่ได้ในการจัดการ
fmrng

สวัสดีเราจัดการโครงการด้วยส่วนประกอบมากกว่า 100 รายการ กุญแจสำคัญคือการทำให้โมดูลมีขนาดเล็กและจัดการการพึ่งพาผู้แต่งของคุณระหว่างโมดูล คุณสามารถโคลนพื้นที่เก็บข้อมูลโครงการวีโอไอพีสำหรับความต้องการของคุณเองและเพิ่มทุกส่วนของคุณกับโครงการของคุณ
เดวิด Verholen

หากคุณมีความสุขกับการตั้งค่าปัจจุบันของคุณก็ไม่เป็นไร สุจริตฉันพบว่ามันค่อนข้างยุ่งยาก มันหมายความว่าคุณมี 100 + composer updateที่เก็บคอมไพล์และทุกครั้งที่คุณมีการเปลี่ยนแปลงบางสิ่งบางอย่างที่คุณต้องเปิดโครงการเฉพาะกระทำการเปลี่ยนแปลงของการทำงาน คุณจะอยู่ที่ไหนกระทำของคุณcomposer.lockแล้ว? หากคุณมี 10+ devs ที่ทำงานในโครงการเดียวกันมันอาจกลายเป็นว่ายุ่งจริงๆ แน่นอนว่าเรามีโมดูลทั่วไปมากมาย (และแม้กระทั่งธีม) ที่เราติดตั้งผ่านทางผู้แต่งเพลง แต่โค้ดเฉพาะโครงการควรเป็นเวอร์ชั่นภายใต้ repo เดียวกันเพื่อความชัดเจน
fmrng

ฉันไม่ได้บอกว่าคุณทำผิดฉันคิดว่ามันค่อนข้างซับซ้อนสำหรับฉัน คุณจะตรวจสอบประวัติ repo ของคุณด้วยการตั้งค่าแบบนี้ได้อย่างไร คุณจะใช้คุณสมบัติเช่นgit blameหรือgit logเมื่อรหัสถูกกระจายในหลาย ๆ องค์ประกอบได้อย่างไร คุณรันการทดสอบการรวมเพื่อดูว่าทุกอย่างทำงานได้ดีหรือไม่?
fmrng

เรามีการสนทนานี้ภายในปีที่แล้วและการปรับใช้ค่อนข้างง่ายเนื่องจากเราตัดสินใจที่จะทำให้มันเป็น 1repo = 1module ประเด็นก็คือคุณจะไม่ทำการอัพเดทผู้แต่งสำหรับการเปลี่ยนแปลงเพียงเล็กน้อย นักพัฒนาสามารถทำงานในสภาพแวดล้อมการพัฒนาและเปลี่ยนไฟล์ได้โดยตรง เมื่อเสร็จแล้วพวกเขาสามารถติดแท็กเป็น alpha, beta หรือ release release ด้วยวิธีนี้นักพัฒนาหลายคนสามารถทำงานในหลายโครงการในเวลาเดียวกันและในครั้งถัดไปคุณทำการปรับปรุงผู้แต่งคุณดึงในการเปลี่ยนแปลงทั้งหมด มีเครื่องมือที่ยอดเยี่ยมสำหรับการจัดระเบียบ vcs และแพ็คเกจนักแต่งเพลงของคุณหลายร้อย Repositories ไม่ควรเป็นปัญหา
David Verholen

2

ตกลงดูเหมือนว่าฉันพบทางออกที่ดีกว่าสำหรับสิ่งที่ฉันพยายามที่จะบรรลุ ในcomposer.jsonมันเป็นไปได้ที่จะระบุไฟล์ที่ควรถูกละเว้นโดย Magento Composer Installer หากฉันไม่ต้องการให้ฉันGruntfile.jsแทนที่ฉันก็สามารถระบุได้ด้วยการกำหนดค่าต่อไปนี้:

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

ตอนนี้ฉันสามารถขยายการติดตั้งมาตรฐานให้เหมาะสมกับความต้องการของฉันได้แล้ว


วิธีนี้ดูเหมือนจะไม่ "อัปเกรดปลอดภัย" หาก Magento จะทำการเปลี่ยนแปลงไฟล์เหล่านี้ที่คุณเพิกเฉยคุณจะไม่ทราบหรือคุณจะลืมไฟล์เหล่านี้ คุณกำลังใช้เวอร์ชันของคุณเองซึ่งจะไม่รวมการเปลี่ยนแปลงใหม่เหล่านี้ โปรดตรวจสอบคำตอบของฉันสำหรับคำแนะนำของฉัน
7ochem

2

น่าเสียดายที่คำตอบที่ได้รับการยอมรับแม้ว่าจะเป็นวิธีที่ แต่เดิมมีจุดประสงค์เพื่อให้บรรลุเป้าหมายที่ต้องการ แต่ทำงานเพื่อยกเว้นไฟล์และไดเรกทอรีที่อยู่ในรูทเพราะถ้าเราต้องการแยกไฟล์ที่อยู่ในไดเรกทอรีย่อย (เช่นdev/tools/grunt/configs/themes.jsจำเป็นถ้าเราเพิ่ม ชุดรูปแบบใหม่และต้องการใช้งาน Magento Grunt) วางไว้ในการกำหนดค่า "magento-deploy-ละเว้น" มันบล็อกการปรับใช้ของไดเรกทอรีหลักทั้งหมด (นั่นคือ dev และไดเรกทอรีย่อยทั้งหมด)

สิ่งนี้เกิดขึ้นเนื่องจากวิธีการที่ใช้ "magento-deploy-ละเว้น" ( \MagentoHackathon\Composer\Magento\Deploystrategy\DeploystrategyAbstract::isDestinationIgnored) ใช้strposเพื่อจับคู่พา ธ ปลายทางกับรายการที่ถูกแยกดังนั้นพาเรนต์พาเรนต์ทั้งหมดจะส่งคืนจริงเสมอ


ฉันรู้ว่าฉันเห็นว่าในการทดสอบของฉัน แต่เนื่องจากเราใช้เวิร์กโฟลว์การสร้างที่แตกต่างกันมันทำงานได้ดีสำหรับเรา ATM คุณสามารถหาตัวเลือกที่ดีกว่าได้หรือไม่
fmrng

เราเริ่มทำการเช็คเอาต์ไฟล์ในระหว่างขั้นตอนการสร้างของไปป์ไลน์ของเราจากนั้นเราหยุดใช้งาน Grunt ในตัวทั้งหมดดังนั้นมันจึงไม่ใช่ปัญหา
Gennaro Vietri

โดยวิธีการที่เราเริ่มต้นการประเมินผลของการติดตั้งวีโอไอพีส้อมสำหรับปรับปรุงพฤติกรรม "วีโอไอพีปรับใช้ - ละเว้น" หากปัญหาควรจะปรากฏขึ้นอีกครั้งเราสามารถปฏิบัติตามเส้นทางนี้
Gennaro Vietri

0

การใช้แผ่นแปะ

สิ่งที่ฉันใช้คือการสร้างและนำแพตช์มาใช้ เมื่อเราต้องการการเปลี่ยนแปลงdev/tools/grunt/configs/themes.js, index.phpหรือ.htaccessเราใช้การเปลี่ยนแปลงกับสำเนาชั่วคราวของแฟ้มและสร้างแพทช์ออกจากมัน (สร้างbuild/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

จากนั้นเราสามารถทำให้แพทช์นี้ใช้โดยอัตโนมัติเมื่อทำงานcomposer installหรือupdateเพิ่มคำสั่ง te ในscriptsส่วนของcomposer.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"
    }
}

(นอกจากนี้คุณสามารถใส่patch ...คำสั่งด้านบนในสคริปต์ทุบตีสมมติว่าbuild/themes_patch.shและเรียกสคริปต์นั้นจากนักแต่งเพลงเพื่อที่จะสามารถนำมาใช้ซ้ำได้หรือปฏิบัติการด้วยตนเอง)

อัพเกรดปลอดภัย! : D

โซลูชันนี้อัพเกรดปลอดภัย! คุณไม่ได้เปลี่ยนไฟล์หลักโดยตรงโดยไม่เคารพไฟล์ต้นฉบับ คุณกำลังใช้โปรแกรมแก้ไขกับไฟล์ Magento2 ดั้งเดิม เมื่อไฟล์นั้นเปลี่ยนแปลงเนื่องจากคุณกำลังอัปเดตแพตช์จะล้มเหลวและคุณรู้ว่าคุณจะต้องพิจารณาการเปลี่ยนแปลงใหม่และสร้างแพตช์ใหม่

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.