Magento 2: भागो `सेटअप: di: संकलन` ** केवल ** एक विशिष्ट मॉड्यूल?


33

क्या एक विशिष्ट मॉड्यूल के लिए कोड को प्री-जेनरेट करना संभव है? आईई - मैं सिस्टम में सभी कोड के साथ उत्पन्न कर सकता हूं

php bin/magento setup:di:compile

हालांकि, इसमें लंबा समय लग सकता है। मैं केवल प्री-जेनरेट करना चाहूंगा एक विशिष्ट मॉड्यूल के लिए फाइलें ।

php bin/magento setup:di:compile Pulsestorm_Commercebug

मैं जिस विशेष समस्या को हल करने की कोशिश कर रहा हूं, वह इस समस्या के आसपास काम कर रही है जिसमें कुछ प्लगइन्स डेवलपर / डिफ़ॉल्ट मोड में पहचाने नहीं जा रहे हैं।


आपके नवीनतम "ओपन क्वेश्चन" लेख को पढ़ने के बाद मेरा उत्तर अपडेट किया गया। प्रश्न का सीधा उत्तर है: नहीं। इसे हल करना जटिल नहीं है। इसे सिर्फ इसलिए लागू नहीं किया गया क्योंकि इसकी कभी जरूरत नहीं समझी गई।
एंटोन क्रिल

एक मॉड्यूल पर 'संकलन' करने की क्षमता प्राप्त करने के लिए बहुत अच्छा होगा, मॉड्यूल विकास में मुद्दों को डीबगिंग करते समय बहुत समय बचाएगा।
करेन बेकर

जवाबों:


20

संक्षिप्त उत्तर: नहीं। यह अब Magento के साथ भेजे गए टूल से संभव नहीं है।

स्पष्टीकरण: हमें कोड पीढ़ी और संकलन को अलग करना होगा । कंपाइलर दोनों करता है। दोनों कार्यों के लिए हमें अन्य सभी मैग्नेटो मॉड्यूलों के कॉन्फ़िगरेशन को पढ़ने की आवश्यकता है, अन्यथा उनका आउटपुट गलत होगा या पूर्ण नहीं होगा।

एक मॉड्यूल के लिए संकलन का कोई मतलब नहीं है, क्योंकि Magento केवल एक मॉड्यूल के लिए संकलित कॉन्फ़िगरेशन के साथ काम नहीं करेगा।

एक मॉड्यूल के लिए जनरेशन समझ में आता है, लेकिन हमें वैसे भी अन्य सभी स्थापित मॉड्यूल से कॉन्फ़िगरेशन और कंस्ट्रक्टर हस्ताक्षर पढ़ना होगा। इसके बिना सभी कोड उत्पन्न नहीं हो सकते हैं। इसलिए इस तरह का ऑपरेशन पूर्ण संकलन की तुलना में बहुत तेज नहीं होगा। हम इसके बारे में सोच सकते हैं, लेकिन मुझे लगता है कि आपके द्वारा संदर्भित बग को कमांड लागू होने से पहले ठीक किया जाएगा।


1
यह एक ऐसी पीड़ा है जो हर बार नए निर्भरता इंजेक्शन तर्क को विकास के दौरान कहीं और जोड़ देती है, क्या विकास के दौरान कोड पीढ़ी को पूरी तरह से बायपास करने का एक तरीका है?
स्नेज

6
आपको विकास के दौरान कभी संकलक नहीं चलाना है। यदि आप विधि हस्ताक्षरों को संशोधित करते हैं, तो आपको अभी भी / पीढ़ी निर्देशिका को साफ़ करना होगा, लेकिन किसी संकलन की आवश्यकता नहीं है। संकलन केवल उत्पादन पर स्विच करने के लिए है।
एंटोन क्रिल

12

Magento के bin/magentoनिष्पादन योग्य सिर्फ एक सिम्फनी कंसोल घटक है। इसका मतलब है कि आप एकल कमांड के लिए अलग-अलग फ़ाइल को फिर से लिख सकते हैं। नामकरण हमेशा सेटअप के लिए समान है: di: संकलन आप DiCompileCommand.php ( setup/src/Magento/Setup/Console/Command/DiCompileCommand.php) पा सकते हैं ।

यह हमेशा चलेगा exeucte() विधि को ताकि हमें देखने की आवश्यकता हो। इस फ़ंक्शन में, आप देखेंगे कि एक $operationsvar सेट है, जो getOperationsConfiguration()विधि द्वारा भरा गया है । यह विधि मूल रूप से DiCompileCommand को संकलन करने के लिए बताती है।

मैंने जो पहली कोशिश की, वह सिर्फ एप्लीकेशन कोड जनरेटर का हिस्सा है, जैसे कि;

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

आप पहचान सकते हैं

पैकेज> मॉड्यूल> Registration.php

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

और चलाने से

php -f bin / magento मॉड्यूल: enable --clear-static-content Package_Module

registration.php मॉड्यूल को पहचानेगा और आपके कस्टम मॉड्यूल की शिकायत करेगा।

उम्मीद है इससे आपको मदद मिलेगी।


2
उपयोगी जानकारी, लेकिन वह नहीं जिसकी मुझे तलाश थी। यह स्थिर सामग्री नहीं है जिसे मैं संकलित करना चाहता हूं, यह वह पीढ़ी है जो सेटअप चलाते समय चलती है: di: संकलन। वो अलग बात है।
एलन स्टॉर्म

-3

जब आप पिछले अनुरोध में उत्पन्न वर्ग के लिए अपना निर्माणकर्ता बदल देते हैं तो वह टूट जाएगा। यदि आप ऐसी ज़रूरतों में हैं तो बस हटा दें var/cache, var/generationऔर var/di(यदि मौजूद है) और पृष्ठ को ताज़ा करें। सुनिश्चित करें कि मोड डेवलपर है जिसमें आप काम कर रहे हैं।

(मैं यह नहीं कह रहा हूं कि मैगेंटो कोडबेस को संकलित या उत्पन्न नहीं करेगा, हां यह होगा। इस तरह से, यह आपके सेटअप या कक्षाओं में परिवर्तन करने पर हर बार "सेटअप: दी: संकलन" चलाने से थोड़ी राहत देता है)


यह एक अलग सवाल का जवाब दे रहा है।
एलन

इसका उत्तर पहले से ही एंटोन क्रिल द्वारा दिया गया था, जो बहुत ही सीधा और तार्किक रूप से सच है। मैंने आपको केवल एक वैकल्पिक समाधान देने की कोशिश की है, जो आपको संकलन चलाने तक कमांड चलाने और आपकी स्क्रीन देखने नहीं देगा। इस तरह से करने से आप अपना समय बचा सकते हैं। उत्तर आपके प्रश्न से बहुत संबंधित है। यदि यह आपका दृष्टिकोण है तो कोई भी समाधान और विचार के साथ नहीं आता है।
लक्ष्मण सिंह
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.