ভিসিএসের অধীনে ম্যাজেন্টো 2 প্রকল্পের পছন্দসই কাঠামো কী?


15

যখন আমি একটি নতুন এম 2 প্রকল্প শুরু করি, আমি প্রথমে করণীয় হ'ল মূলটি সুরকারের মাধ্যমে ইনস্টল করা:

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

আমি এখন আমার কাস্টম মডিউল (গুলি) এবং থিম (গুলি) এর অধীনে লিখতে পারি app/code। তারপরে আমি আমার composer.*এবং পুরো app/codeফোল্ডারটি আমার ভিসিএসে যুক্ত করব। এখনও পর্যন্ত সবকিছু ঠিক আছে।

মনে করুন এখন আমি আমার প্রকল্পের জন্য কিছু বিল্ড সরঞ্জাম ব্যবহার করতে চাই, আসুন গ্রান্ট বা গুল্প বলি।

  1. যদি আমি আমার নিজস্ব প্রতিশ্রুতিবদ্ধ হয় Gruntfile.js, আমি রেপো ক্লোন করার পরে magento/magento2-baseযখন চালনা করব তখন এটি প্যাকেজের মাধ্যমে ওভাররাইট হয়ে যাবে composer install

  2. যদি আমি আমার প্রতিশ্রুতিবদ্ধ হয় তবে আমি gulpfile.jsসত্যিকার অর্থে আমার নির্ভরতাগুলি সংজ্ঞায়িত করতে পারি না package.json, কারণ এটি দ্বারাও ওভাররাইট করা হবে magento/magento2-base

  3. আমি যদি ম্যাজেন্টোর গ্রান্ট সেটআপটি ব্যবহার করার সিদ্ধান্ত নিয়েছি এবং /dev/tools/grunt(উদাহরণস্বরূপ themes.js) এর অধীনে ফাইলগুলি সম্পাদনা করে এটি কাস্টমাইজ করতে চাই , তবে আমি করতে পারি না কারণ আমার পরিবর্তনগুলি ওভাররাইট হয়ে যাবে magento/magento2-base

আমার বোধগম্যতা হল আপনি নিজের ডকুমেন্টের মূলটিতে খুব বেশি কিছু করতে পারবেন না। এই সমস্যার অবশ্যই প্রচুর সমাধান রয়েছে:

  • আমি git checkout -আমার নিজের ফাইলগুলি পুনরায় সেট করতে ইনস্টলের পরে ডানদিকে চালাতে পারি
  • /buildউদাহরণস্বরূপ , আমি আমার বিল্ড ফাইলগুলিকে ডেডিকেটেড ফোল্ডারে সঞ্চয় করতে পারি
  • আমি ফিলিং, পিঁপড়া বা রেকের মতো আলাদা বিল্ড টুল ব্যবহার করতে পারি (যদিও আমার ফ্রন্টএন্ড ডেভস এত খুশি হবে না)
  • আমি এমন magento/magento2-baseএকটি কাস্টম প্যাকেজটি প্রতিস্থাপন করতে পারি যা কোর ফাইলগুলির জন্য কাস্টম ম্যাপিং রয়েছে (সত্যিই অনুকূল নয় তবে ওহে, এটি একটি বিকল্প)

আমি ব্যক্তিগতভাবে এই সমস্ত অপছন্দকে অপছন্দ করি, তাই আমি কী করতে চাইছি তা অর্জন করার জন্য পছন্দসই বা আরও ভাল উপায় আছে কিনা তা জানতে চাই।

কারও কি একই সমস্যা হচ্ছে? তুমি এটা কিভাবে সমাধান করেছিলে? আপনি কীভাবে ভিসিএসের আওতায় আপনার প্রকল্পটি কাঠামো করেন?

হালনাগাদ

প্রকল্প সেটআপ সম্পর্কিত একটি অতিরিক্ত পয়েন্ট। আমার পরীক্ষাগুলিতে আমি লক্ষ্য করেছি যে ম্যাজেন্টো সুরকার ইনস্টলারটির ফাইল ওভাররাইডের জন্য একটি পতাকা রয়েছে:

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

আমার ভুল না হলে এটি অভ্যন্তরীণভাবে বুলেটিয়ান হিসাবে বিবেচিত হয়, তাই আমি এটিকে falseওভাররাইডিং এড়াতে সেট করার চেষ্টা করেছি । আমি যখন composer installফাইল চালাচ্ছি তখনই ফাইলটি ইতোমধ্যে উপস্থিত থাকার কারণে আমার ইনস্টলেশনটি ব্যর্থ হয়। মূলত, যদি আমি ম্যাজেন্টোকে আমার ফাইলগুলিকে ওভাররাইড না করি তবে আমি এটি ইনস্টল করতে পারছি না।

তখন এই পতাকাটির উদ্দেশ্য কী? এটা কি কেবল আমার জন্য একটি চেক সঞ্চালন করা অনুমান? এটা আমার কাছে সত্য বলে খুব একটা বোঝা যায় না, তবে সম্ভবত কেউ এই বিষয় সম্পর্কে কিছু আলোকপাত করতে পারে।


অন্যেরা উত্তর হিসাবে কী পোস্ট করে তা দেখতে আমি আগ্রহী। আদর্শভাবে, আমি মনে করি আমরা ম্যাজেন্টো কোরকে আমাদের মূল রেপো থেকে দূরে রাখতে চাই এবং এটি কেবলমাত্র আমাদের তৈরি টেমপ্লেট এবং আমরা যুক্ত বা ডান কোনও কাস্টম প্লাগইন সীমাবদ্ধ রাখতে চাই। তারপরে নির্মাণের সময়, আমরা মূলটি + আমাদের প্রকল্পের রেপো রেফার করি এবং সংগ্রহস্থলগুলি থেকে একটি অ্যাপ্লিকেশন আর্টিক্ট তৈরি করি। আমি সম্প্রতি এম 1 এর জন্য এই পদ্ধতিটি ব্যবহার করে আসছি এবং আমি ভাবছি যে যদি ম্যাজেন্টো থেকে সরকারী সুপারিশটি এখন এম 2 এর সাথে অনুরূপ কিছু করছে যা সুরকার পুরোপুরি সমর্থিত।
ব্রায়ান 'বিজে' হফপাউয়ার জুনিয়র

নতুন, M2 সংস্করণে, Gruntfile.js, gulpfile.jsএবং package.jsonসমস্যা সমাধান করা হয়। ইস্যু এই প্রশ্নের সুরাহা যখন আপনি পরিবর্তন করতে হবে এখনও নতুন Magento 2 সংস্করণ প্রযোজ্য themes.js, index.phpবা .htaccessউদাহরণস্বরূপ।
7:55

উত্তর:


4

সংক্ষিপ্ত শব্দটি, আমরা স্বতন্ত্রকরণের প্রয়োজন এমন ফাইলগুলি পৃথক করে দেখছি। উদাহরণস্বরূপ, যদি লোকেরা সূচি.এফপি সংশোধন করতে হয়, তবে স্থানীয় কাস্টমাইজেশনের প্রয়োজন থেকে স্ট্যান্ডার্ড ফাইল ম্যাজেন্টো জাহাজগুলি কীভাবে আলাদা করা যায় তা নিয়ে কাজ করুন। একবার অর্জন করা গেলে, "সমস্ত প্রকল্পের জন্য একটি সত্যিকারের গিটিংগোর ব্যবহার করা যায়" এটি সম্ভব। এটি হ'ল, "সুরকার ইনস্টল" আপনার জন্য যে সমস্ত কিছু আনবে (গিগটিনোরের সাথে গিটকে পুরো প্রকল্পের ডিরেক্টরি পরিচালনা করা সহজ (এবং কোনও প্যাচ বা আপগ্রেড ইনস্টল করার সময় "রচয়িতা আপডেট" প্রতিস্থাপন করবে)।

দীর্ঘ মেয়াদী, লক্ষ্যটি সংক্ষিপ্ত করা। যতটা সম্ভব গিটিগনোর। যেমন 'বিক্রেতা' ডিরেক্টরি অধীনে মডিউলগুলিতে আরও চাপুন।

তারপর

  1. সমস্ত প্রকল্পের জন্য যা আপনি ভাগ করতে চান না তার জন্য এটিকে অ্যাপ / কোডের আওতায় রেখে মূল প্রকল্পের রেপোতে প্রতিশ্রুতিবদ্ধ।
  2. স্থানীয়ভাবে বিকাশযুক্ত সমস্ত কিছু আপনি প্রকল্পগুলিতে আরও সহজে ভাগ করে নিতে চান, একটি পৃথক জিআইটি রেপো রেখে এবং সুরকারের মাধ্যমে ইনস্টল করতে চান যাতে এটি 'বিক্রেতার' অধীনে শেষ হয়। (স্থানীয় সুরকার রেপো হতে পারে, বা সরাসরি জিআইটি থেকে ইনস্টল করুন))

আপনি এখনও নীচে থেকে পুরো প্রকল্প ট্রি প্রতিশ্রুতিবদ্ধ করতে পারেন, কম্পোজার.জসন এবং সুরকারক্লক ফাইলগুলি ক্যাপচার করুন (কেবল অ্যাপ্লিকেশন / কোড দেয় না)। .Gitignore 'বিক্রেতা' ডিরেক্টরি এবং অন্য ফাইলগুলি চাইছিল না exc

এটি আপনাকে অন্যান্য আলোচনায় উল্লিখিত উভয় বিশ্বের সেরা দেয়। বর্তমান ব্যথা হ'ল .gitignore ফাইলের দৈর্ঘ্য এবং জটিলতা এবং প্যাচ ইনস্টলেশনটি বর্তমানে কিছু স্থানীয় কাস্টমাইজেশন মুছে ফেলে (যেমন সূচি.এফপি ইন)। স্বল্পমেয়াদী কর্মসূচী - .gitignore থেকে index.php সরান, এবং আপনি কোনও প্যাচ ইনস্টল করার পরে আপনি কী কী পরিবর্তনগুলি (গিট ডিফ) হারিয়েছেন তা পরীক্ষা করে দেখুন এবং সেগুলি ম্যানুয়ালি পুনরায় প্রয়োগ করতে পারেন।


ঠিক আছে, যাতে আপনি অদূর ভবিষ্যতে কিছু জিনিস পরিবর্তন করবেন, দুর্দান্ত! আমি ভাবছি এই "magento-force": "override"পতাকাটি যদি কোনওভাবে কার্যকর হতে পারে। এই মুহূর্তে এটি ঠিক যা করছে আমি আশা করি না doing আপনি আপনার index.phpবা অন্য কোনও "মূল" ফাইল সম্পাদনা / প্রসারিত করার ক্ষেত্রে আপনি কেবল ম্যাগেন্টোকে বলতে পারেন যে আপনার পরিবর্তনগুলি ওভাররাইট না করে। এটা কোন অর্থ আছে?
এফএমআরং

3

আপনার ওভাররাইড সমস্যার জন্য একটি সহজ সমাধান রয়েছে: মূল ফাইলগুলি পরিবর্তন করবেন না;) ম্যাজেন্টো কোডটি বাড়ানো এবং এটি পরিবর্তন না করার উপর ভিত্তি করে।

প্রথমটি হ'ল, আপনার নিজের অ্যাপ্লিকেশন / কোড ফোল্ডারটি একটি ভিসি রিপোজিটরিতে রাখা উচিত নয়। প্রতিটি ম্যাজেন্টো উপাদান (মডিউল, থিম, ইত্যাদি ...) নিজেই একটি সংগ্রহস্থল হওয়া উচিত।

আপনি যদি সীমানা পরিবর্তন করতে / প্রসারিত করতে চান, আপনার একটি নতুন থিম তৈরি করা উচিত এবং পুরো থিমটিকে পুরো ম্যাগানোটো 2 ইনস্ট্যান্স হিসাবে নয়, আপনার এই গুরুতর প্রকল্প হিসাবে বিবেচনা করা উচিত।

আপনার প্রকল্পে আপনার থিমটি ইনস্টল করতে আপনি সহজেই আপনার ভিসিএস সংগ্রহস্থল থেকে সুরকারের মাধ্যমে এটিকে টানতে পারেন


ঠিক আছে, app/codeফোল্ডারটি বিশেষত ম্যাগেন্তোকে কাস্টমাইজ করার জন্য রয়েছে। বর্তমানের এম 2 সম্পর্কে আমার ধারণাটি হ'ল এম 1-এ app/codeযা app/code/localছিল তা প্রতিস্থাপন করে এবং কমপিউটার মডিউলগুলি সুরকারের অধীনে ইনস্টল করা যেতে পারে vendor। আমাদের কাছে প্রচুর সংখ্যক মডিউল এবং কয়েকটি থিম সহ কয়েকটি প্রকল্প রয়েছে। আপনি যা পরামর্শ দিচ্ছেন তা পরিচালনা করা অসম্ভব।
এফএমআরং

আরে, আমরা 100 টি উপাদান দিয়ে প্রকল্প পরিচালনা করি। কীটি হ'ল মডিউলগুলি ছোট রাখা এবং মডিউলগুলির মধ্যে আপনার সুরকার নির্ভরতা পরিচালনা করা। আপনি আপনার নিজের প্রয়োজনের জন্য ম্যাজেন্টো প্রকল্পের সংগ্রহস্থলটিকে ক্লোন করতে পারেন এবং আপনার প্রকল্পে আপনার সমস্ত উপাদান যুক্ত করতে পারেন
ডেভিড ভারহোলেন

আপনি যদি আপনার বর্তমান সেটআপটিতে খুশি হন তবে তা ঠিক আছে। সত্যি বলতে, আমি এটি বরং জটিল মনে করি। এর অর্থ আপনার কাছে 100+ গিট সংগ্রহস্থল রয়েছে এবং প্রতিবার আপনি কোনও নির্দিষ্ট প্রকল্প খুলতে হবে, আপনার প্রতিশ্রুতিবদ্ধ হবেন, চালান composer update। আপনি কোথায় আপনার প্রতিশ্রুতিবদ্ধ না composer.lock? যদি একই প্রকল্পে আপনার 10+ ডিভ কাজ করে থাকে তবে এটি সত্যিই অগোছালো হয়ে উঠতে পারে। অবশ্যই আমাদের প্রচুর সাধারণ মডিউল রয়েছে (এবং থিম এমনকি) যা আমরা সুরকারের মাধ্যমে ইনস্টল করি, তবে প্রকল্প-নির্দিষ্ট কোডটি স্পষ্টতার জন্য একই রেপোর অধীনে সংস্করণ করা উচিত।
এফএমআরং

আমি বলছি না আপনি এটি ভুল করছেন, আমার মনে হয় এটি আমার স্বাদের জন্য কিছুটা জটিল c আগ্রহের বাইরে, আপনি কীভাবে এমন একটি সেটআপ দিয়ে আপনার রেপো ইতিহাসটি পরিদর্শন করবেন? আপনি কিভাবে মত বৈশিষ্ট্য ব্যবহার করতে পারেন git blameবা git logযখন কোড একাধিক উপাদান ছড়িয়ে ছিটিয়ে হয়? সবকিছু ঠিকঠাক চলছে কিনা তা দেখার জন্য আপনি কি ইন্টিগ্রেশন টেস্ট পরিচালনা করেন?
এফএমআরএনজি

আমরা গত বছর অভ্যন্তরীণভাবে এই আলোচনা করেছি এবং যেহেতু আমরা এটিকে 1 রিপো = 1 মডিউল করার সিদ্ধান্ত নিয়েছি মোতায়েনগুলি বরং সহজ হয়েছে। পয়েন্টটি হ'ল আপনি সামান্য পরিবর্তনের জন্য কোনও সুরকার আপডেট করবেন না। বিকাশকারীরা দেব পরিবেশে কাজ করে এবং সরাসরি ফাইলগুলি পরিবর্তন করে। এগুলি হয়ে গেলে, তারা এটিকে আলফা, বিটা বা প্রকাশের প্রার্থী হিসাবে ট্যাগ করতে পারে। এইভাবে, বেশ কয়েকটি বিকাশকারী একই সাথে এবং পরের বারে অনেকগুলি প্রকল্পে কাজ করতে পারে, আপনি একটি সুরকার আপডেট করেন যা আপনি সমস্ত পরিবর্তনগুলিতে টানেন। আপনার VCS এবং আধারগুলির সুরকার packages.Hundreds সংগঠিত একটি সমস্যা হতে করা উচিত নয় জন্য মহান হাতিয়ার
ডেভিড Verholen

2

ঠিক আছে, দেখে মনে হচ্ছে যা আমি অর্জন করার চেষ্টা করছিলাম তার জন্য আমি আরও ভাল সমাধান পেয়েছি। এর মধ্যে composer.json, ম্যাজেন্টো সুরকার ইনস্টলার দ্বারা কোন ফাইলগুলি উপেক্ষা করা উচিত তা নির্দিষ্ট করা সম্ভব। আমি যদি আমার Gruntfile.jsওভাররাইড হওয়া না চাই , আমি কেবল নীচের কনফিগারেশন দিয়ে এটি নির্দিষ্ট করতে পারি:

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

আমি এখন আমার প্রয়োজন অনুসারে মানক ইনস্টলেশনটি প্রসারিত করতে সক্ষম।


এই সমাধানটি "আপগ্রেড নিরাপদ" বলে মনে হচ্ছে না। যদি ম্যাজেন্টো আপনি যে ফাইলগুলিকে উপেক্ষা করছেন সেগুলিতে পরিবর্তন করে তোলে তবে আপনি জানেন না বা আপনি এই ফাইলগুলি ভুলে যাবেন। আপনি নিজের সংস্করণ ব্যবহার করছেন যা কখনই এই নতুন পরিবর্তনগুলিকে অন্তর্ভুক্ত করবে না। আমার পরামর্শ জন্য আমার উত্তর চেক করুন।
ওচেম

2

দুর্ভাগ্যক্রমে গৃহীত উত্তর, যদিও প্রাথমিকভাবে কাঙ্ক্ষিত লক্ষ্য অর্জনের উদ্দেশ্যে করা হয়েছে, কেবলমাত্র রুটটিতে রাখা ফাইল এবং ডিরেক্টরিগুলি বাদ দেওয়ার জন্য কাজ করুন, কারণ আমরা যদি একটি সাব-ডিরেক্টরীতে রাখা ফাইলকে বাদ দিতে চাই (যেমন dev/tools/grunt/configs/themes.js, আমরা যদি যুক্ত করি তবে প্রয়োজনীয় নতুন থিম এবং ম্যাজেন্টো গ্রান্ট টাস্কগুলি ব্যবহার করতে চান) এটি "ম্যাজেন্টো-ডিপ্লয়ে-এলোজেন" কনফিগারেশনে রেখে এটি সমস্ত অভিভাবক ডিরেক্টরি (যা দেব এবং এর সমস্ত উপ-ডিরেক্টরি) মোতায়েন করে না।

এটি ঘটবে কারণ "ম্যাজেন্টো-ডিপ্লয়ে-উপেক্ষা" ( \MagentoHackathon\Composer\Magento\Deploystrategy\DeploystrategyAbstract::isDestinationIgnored) প্রক্রিয়া পদ্ধতিটি strposবাদ দেওয়া তালিকার সাথে গন্তব্য পথের সাথে মেলে ব্যবহার করে, তাই প্রতিটি প্যারেন্ট পথ সর্বদা সত্য ফিরে আসবে।


আমি জানি, আমি আমার পরীক্ষাগুলিতে এটি দেখতে পেতাম, তবে যেহেতু আমরা একটি ভিন্ন বিল্ড ওয়ার্কফ্লো ব্যবহার করছি এটি এটি আমাদের পক্ষে ভাল কাজ করে। আপনি কি আরও ভাল বিকল্প খুঁজে পেতে পারেন?
এফএমআরএনজি

আমাদের পাইপলাইনের বিল্ড পর্বের সময় আমরা ফাইলগুলির চেকআউট করা শুরু করি, তারপরে আমরা কোনও অন্তর্নির্মিত গ্রান্ট কার্যগুলিতে ব্যবহার বন্ধ করেছিলাম যাতে এটি কোনও সমস্যা না হয়।
জেনারো ভিয়েত্রি

যাইহোক, আমরা "ম্যাজেন্টো-স্থাপনা-উপেক্ষা করুন" আচরণটি বাড়ানোর জন্য কাঁটাচাঁটি ম্যাজেন্টো-সুরকার-ইনস্টলারটির মূল্যায়ন শুরু করেছি, যদি সমস্যাটি আবার দেখা দেয় তবে আমরা এই পথটি অনুসরণ করতে পারি
জেনারো ভিয়েত্রি

0

প্যাচ ব্যবহার

আমি যা ব্যবহার করি তা প্যাচগুলি তৈরি এবং প্রয়োগ করা হয়। যখন আমাদের পরিবর্তন করার দরকার হয় dev/tools/grunt/configs/themes.js, index.phpবা .htaccessআমরা ফাইলগুলির অস্থায়ী অনুলিপিতে পরিবর্তনগুলি প্রয়োগ করি এবং এর বাইরে একটি প্যাচ তৈরি করি ( build/প্রথমে একটি ডিয়ার তৈরি করুন ):

$ 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টি কমান্ড যুক্ত করে এই প্যাচটি স্বয়ংক্রিয়ভাবে প্রয়োগ করতে পারি :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"
    }
}

(এছাড়াও আপনি উপরের patch ...কমান্ডটি বাশ স্ক্রিপ্টে রাখতে পারেন, যাক build/themes_patch.shএবং স্ক্রিপ্টটিকে সুরকারের কাছ থেকে কল করুন যাতে এটি পুনরায় ব্যবহারযোগ্য বা ম্যানুয়ালি সম্পাদনযোগ্য হবে)

আপগ্রেড নিরাপদ! : ডি

এই সমাধানটি নিরাপদে আপগ্রেড! আপনি মূল ফাইলটিকে সম্মান না করে সরাসরি মূল ফাইলগুলি পরিবর্তন করছেন না। আপনি আসল Magento2 ফাইলে একটি প্যাচ প্রয়োগ করছেন। যখন আপনি আপগ্রেড করার কারণে সেই ফাইলটি পরিবর্তিত হবে, প্যাচটি ব্যর্থ হবে এবং আপনি জানেন যে আপনাকে নতুন পরিবর্তনগুলি খুব কাছ থেকে দেখতে হবে এবং একটি নতুন প্যাচ তৈরি করতে হবে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.