ম্যাজেন্টো 2: রান `সেটআপ: ডিআই: কম্পাইল` ** কেবল ** একটি নির্দিষ্ট মডিউল?


33

একটি নির্দিষ্ট মডিউলের জন্য কোডটি কি আগে জেনারেট করা সম্ভব? আই ই - আমি তৈরি করতে পারেন সব সঙ্গে সিস্টেমের মধ্যে কোড

php bin/magento setup:di:compile

তবে এটি দীর্ঘ সময় নিতে পারে। আমি একটি নির্দিষ্ট মডিউলের জন্য কেবল ফাইলগুলি প্রাক-উত্পন্ন করতে চাই ।

php bin/magento setup:di:compile Pulsestorm_Commercebug

আমি যে নির্দিষ্ট সমস্যাটি সমাধান করতে চাইছি তা হ'ল কিছু প্লাগইন বিকাশকারী / ডিফল্ট মোডে স্বীকৃতি না পেয়ে এই সমস্যাটি নিয়ে কাজ করছে ।


আপনার সর্বশেষ "ওপেন প্রশ্নাবলী" নিবন্ধটি পড়ে আমার উত্তর আপডেট করুন Updated প্রশ্নের সরাসরি উত্তর: না। এটি সমাধান করা জটিল নয়। এটি কেবল কার্যকর করা হয়নি কারণ কখনই প্রয়োজন বলে বিবেচিত হয়নি।
আন্তন ক্রিল

একটি মডিউলে 'সংকলন' করার ক্ষমতা অর্জন করা দুর্দান্ত হবে, মডিউল বিকাশে সমস্যাগুলি ডিবাগ করার সময় অনেক সময় সাশ্রয় হবে।
কারেন বাকের

উত্তর:


20

সংক্ষিপ্ত উত্তর: না, এখনই ম্যাজেন্টো দিয়ে চালিত সরঞ্জামগুলির মাধ্যমে এটি সম্ভব নয়।

ব্যাখ্যা: আমাদের কোড জেনারেশন এবং সংকলনকে আলাদা করতে হবে । সংকলক উভয়ই করেন। উভয় ক্রিয়াকলাপের জন্য আমাদের অন্য সমস্ত ম্যাজেন্টো মডিউলগুলির কনফিগারেশনটি পড়তে হবে, অন্যথায় তাদের আউটপুটটি ভুল হবে বা পূর্ণ হবে না।

একটি মডিউলের জন্য সংকলন কোনও অর্থবোধ করে না, কারণ ম্যাজেন্টো কেবল একটি মডিউলের জন্য সংকলিত কনফিগারেশন নিয়ে কাজ করবে না।

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


1
প্রতিবারই নতুন নির্ভরতা ইনজেকশন যুক্তিটি উন্নয়নের সময় অন্য কোথাও যুক্ত হওয়ার পরে এটি পুনরায় সংশোধন করতে হবে এমন ব্যথা এটি কি বিকাশের সময় কোড জেনারেশনকে বাইপাস করার কোনও উপায় আছে?
সনেজ

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

12

ম্যাজেন্টোর bin/magentoএক্সিকিউটেবল কেবল একটি সিমফনি কনসোল উপাদান। এর অর্থ আপনি একক কমান্ডের জন্য পৃথক ফাইলটিকে পুনরায় প্রেরণযোগ্য দেখতে পাবেন। নামকরণ সর্বদা একই থাকে তাই সেটআপের জন্য: di: সংকলন আপনি DiCompileCommand.php ( setup/src/Magento/Setup/Console/Command/DiCompileCommand.php) খুঁজে পেতে পারেন ।

এটি সর্বদা exeucte()পদ্ধতিটি চালাবে যাতে আমাদের সন্ধানের প্রয়োজন সেখানে। এই ফাংশনে, আপনি দেখতে পাবেন যে কোনও $operationsভেরি সেট করা আছে, যা getOperationsConfiguration()পদ্ধতি দ্বারা পূর্ণ । এই পদ্ধতিটি মূলত ডাই কমপাইল কম্যান্ডকে কী সংকলন করতে হয় তা বলে।

আমি প্রথমে চেষ্টা করেছি ঠিক তেমন অ্যাপ্লিকেশন কোড জেনারেটর অংশ, ফিরে আসার;

private function getOperationsConfiguration(
    array $compiledPathsList
) {
    $excludePatterns = [];
    foreach ($this->excludedPathsList as $excludedPaths) {
        $excludePatterns = array_merge($excludedPaths, $excludePatterns);
    }

    return [
        OperationFactory::APPLICATION_CODE_GENERATOR => [
            'paths' => [
                $compiledPathsList['application'],
                $compiledPathsList['library'],
                $compiledPathsList['generated_helpers'],
            ],
            'filePatterns' => ['php' => '/\.php$/'],
            'excludePatterns' => $excludePatterns,
        ]
    ];
}

এটি বেশ ভাল গিয়েছে, সংকলনের সময়টি নাটকীয়ভাবে কাটা হয়েছিল;

Compilation was started.
Application code generator... 1/1 [============================] 100% 45 secs 308.8 MiB
Generated code and dependency injection configuration successfully.

উল্টোদিকে;

Compilation was started.
Interception cache generation... 7/7 [============================] 100% 3 mins 377.0 MiBB8 MiB
Generated code and dependency injection configuration successfully.

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

আপনি এখানে দায়বদ্ধ জেনারেটরগুলি খুঁজে পেতে পারেন;

সেটআপ / src / Magento / সেটআপ / মডিউল / ডি / অ্যাপ্লিকেশন / টাস্ক / অপারেশন /

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


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

3

আপনি দ্বারা চিনতে পারেন

প্যাকেজ> মডিউল> রেজিস্ট্রেশন.এফপি

<?php
use \Magento\Framework\Component\ComponentRegistrar;
ComponentRegistrar::register(ComponentRegistrar::MODULE, 'Package_Module', __DIR__);

এবং রান চেয়ে

পিএইচপি-ফিন বিন / ম্যাজেন্টো মডিউল: - ক্লিয়ার-স্ট্যাটিক-সামগ্রী প্যাকেজ_মডিউল সক্ষম করুন

রেজিস্ট্রেশন.এফপি মডিউলটি সনাক্ত করে আপনার কাস্টম মডিউলটি সংকলন করবে।

আমি আশা করি এটা তোমাকে সাহায্য করবে।


2
দরকারী তথ্য, তবে আমি যা খুঁজছিলাম তা নয়। এটি স্থিতিশীল সামগ্রী নয় যা আমি সঙ্কলন করতে চাই, এটি প্রজন্মটি যা আপনি সেটআপ চালানোর সময় চলে: ডি: সংকলন করুন। এটা আলাদা জিনিস।
অ্যালান ঝড়

-3

পূর্ববর্তী অনুরোধে উত্পন্ন উত্পন্ন শ্রেণীর জন্য যখন আপনি আপনার কনস্ট্রাক্টর পরিবর্তন করবেন তখন এটি ভেঙে যাবে। আপনি যদি এমন প্রয়োজনে কেবল মুছুন var/cache, var/generationএবং var/di(উপস্থিত থাকলে) পৃষ্ঠাটি রিফ্রেশ করুন। আপনি কাজ করছেন তা নিশ্চিত করুন মোডটি বিকাশকারী।

(আমি এইভাবে বলছি না ম্যাজেন্টো কোডবেস সংকলন বা জেনারেট করবে না, হ্যাঁ এটি করবে will এভাবে করার পরে প্রতিবার আপনার রুট বা ক্লাসে পরিবর্তন করার পরে "সেটআপ: ডি: কম্পাইল" চালানো থেকে কিছুটা স্বস্তি পাওয়া যায়))


এটি অন্য একটি প্রশ্নের উত্তর দিবে বলে মনে হচ্ছে।
অ্যালান ঝড়

উত্তর ইতিমধ্যে উপরের অ্যান্টন ক্রিল দিয়েছিলেন, এটি খুব সোজা এবং যৌক্তিকভাবে সত্য। আমি আপনাকে কেবলমাত্র একটি বিকল্প সমাধান দেওয়ার চেষ্টা করেছি যা সংকলন চালানো না হওয়া পর্যন্ত আপনাকে কমান্ড চালাতে এবং আপনার স্ক্রিনটি দেখতে দেয় না। এইভাবে করা আপনি আপনার সময় বাঁচাতে পারেন। উত্তরটি আপনার প্রশ্নের সাথে বেশ জড়িত। যদি এটি আপনার মনোভাব হয় তবে কেউ সমাধান এবং চিন্তাভাবনা নিয়ে আসে না।
লক্ষ্মণ সিং
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.