Magento 2 कोर फ़ाइलों को बदलने के बिना नए विषय जोड़ें। असंतोष का शब्द


11

मूलभूत फ़ाइलों को बिना टच / एडिटिंग के जैसे डिफ़ॉल्ट Magento 2 ग्रन्ट कॉन्फ़िगरेशन को कैसे बढ़ाया जाए Gruntfile.jsऔर dev/tools/grunt/configs/themes.js?

जवाबों:


10

Magento 2 के लिए नया विषय बनाना पहले भी Magento के साथ अनुभव करने के लिए एक चुनौती हो सकती है। डिसेंट डेवलपर्स कोर मैगेंटो फ़ाइलों को नहीं बदलेंगे, लेकिन इसके बजाय "रैपर" बनाएं, ताकि भविष्य में पैच स्थापित करने और अपडेट करने पर आपके पास स्थिति नहीं होगी जब आपके सभी परिवर्तन ओवरराइड हो जाते हैं या गलत तरीके से विलय होते हैं।

Gruntfile.js और themes.js फ़ाइलों को बढ़ाएँ

मान लें कि आपने नई थीम बनाई है और जैसा कि हम प्रलेखन Magento 2 डॉक्स से जानते हैं, आपको फ़ाइल dev/tools/grunt/configs/themes.jsको सूची में अपने विषय को जोड़ने के लिए बदलना होगा , इसलिए ग्रंट pub/staticफ़ोल्डर में सीएसएस / सीलिंक / कॉपी / कम फ़ाइलों को संकलित कर सकता है ।

Step1: /dev/tools/grunt/configs/themes.yourthemename.jsफ़ाइल बनाएँ जो डिफ़ॉल्ट themes.jsफ़ाइल के रूप में फैली हुई है

'use strict';

var defaultThemes   = require('./themes'),
    _               = require('underscore');

var yourTheme = {
    yourthemename: {
        area: 'frontend',
        name: '<vendor>/<yourthemename>',
        locale: 'en_US',
        files: [
            'css/main',
        ],
        dsl: 'less'
    }
};

module.exports = _.extend(defaultThemes, yourTheme);

Step2: Gruntfile.jsफ़ाइल के साथ बढ़ाएँGruntfile.yourthemename.js

'use strict';

var defaultGruntfile    = require('./Gruntfile'),
    _                   = require('underscore');

var yourthemeGruntfile = {};
    yourthemeGruntfile.themes = require('./dev/tools/grunt/configs/themes.yourthemename');

module.exports = _.extend(defaultGruntfile, yourthemeGruntfile);

Step3: अब आप अपने विषय के लिए ग्रन्ट कार्य चला सकते हैं जैसे:

grunt --gruntfile=Gruntfile.yourthemename.js clean:yourthemename
grunt --gruntfile=Gruntfile.yourthemename.js exec:yourthemename
grunt --gruntfile=Gruntfile.yourthemename.js less:yourthemename
grunt --gruntfile=Gruntfile.yourthemename.js watch:yourthemename

क्या इस पद्धति का उपयोग करके ग्रंटफाइल को एक नया कार्य पंजीकृत करना संभव है? मैं अपनी विस्तारित फ़ाइल में "ग्रन्ट" का उपयोग करने के लिए संघर्ष कर रहा हूं।
टिस्का

1
अतिरिक्त कार्यों के साथ ग्रन्ट फ़ाइल का विस्तार करने का तरीका जानें
Tisch

1
Jev जब आप चलाते हैं exec:yourthemenameतो आपको मिलता है Warning: Required config property "clean.yourthemename" missing. Used --force, continuing.?? यह अजीब है मैं clean:yourthemenameकमांड के साथ अपने विषय को साफ करने में सक्षम हूं, लेकिन मुझे लगता है कि execकमांड को त्रुटि के बिना ऐसा करना चाहिए।
डैरेन फेल्टन

1
मैंने देखा है कि कई फाइलें अंदर dev/tools/grunt/configsएक प्रदर्शन करती हैं require('./themes'), उदाहरण हैं clean.jsऔर exec.jsउस निर्देशिका के अंदर। जो मुझे विश्वास दिलाता है कि ये फाइलें तब हमारे नए जोड़े गए विषय को याद कर रही होंगी themes.yourthemename.js। फिर भी यह सेटअप काम करता है मैं सिर्फ अपनी Required config property "clean.yourthemename" missing.त्रुटि का कारण निर्धारित नहीं कर सकता ...
डैरेन फेल्टन

2

जब Jev Mokrousov का समाधान आपको फिट नहीं होता है, तो दो विकल्प हैं जिन्हें आप आज़मा सकते हैं:

कम्पोज़र पोस्ट इंस्टाल कमांड

magento/magento2-baseपैकेज की स्थापना के दौरान , फ़ाइल Gruntfile.jsऔर फ़ोल्डर dev/toolsको पैकेज से आपके रूट फ़ोल्डर में कॉपी किया जाएगा , जो किसी भी मौजूदा फ़ाइल को अधिलेखित कर देगा, जो Magento2 बेस composer.jsonमैपिंग ( vendor/magento/magento2-base/composer.jsonआपके प्रोजेक्ट में देखें ) के कारण होता है :

{
    "extra": {
        "map": [
            [
                "dev/tools",
                "dev/tools"
            ],
            [
                "Gruntfile.js",
                "Gruntfile.js"
            ]
        ]
    }
}

आप अपने संस्करणों को कहीं Gruntfile.jsऔर dev/tools/grunt/configs/themes.jsरख सकते हैं (हमने उन्हें हमारे निर्माण निर्देशिका संरचना के अंदर डाल दिया है build/tools/grunt/)।

अब कुछ संगीतकार घटनाओं से पहले या बाद में अतिरिक्त कमांड या स्क्रिप्ट जोड़ने की संभावना है । हम post-install-cmdMagento के प्रमुख लोगों पर इन फ़ाइलों के हमारे संस्करणों की प्रतिलिपि बनाने के लिए संगीतकार की घटना में हुक कर सकते हैं। आपको इसे अपनी परियोजना में जोड़ना चाहिए composer.json:

{
    "scripts": {
        "post-install-cmd": "cp -vfp build/tools/grunt/Gruntfile.js . && cp -vfp build/tools/grunt/themes.js dev/tools/grunt/configs/"
    }
}

यह आपको दिखाएगा:

> cp -vfp build/tools/grunt/Gruntfile.js . && cp -vfp build/tools/grunt/themes.js dev/tools/grunt/configs/
build/tools/grunt/Gruntfile.js -> Gruntfile.js
build/tools/grunt/themes.js -> dev/tools/grunt/configs/themes.js


एक संगीतकार मॉड्यूल के रूप में थीम

जैसे magento/magento2-baseपैकेज प्रोजेक्ट की रूट में फाइल मैप कर रहा है (जैसा कि ऊपर बताया गया है) आप खुद भी ऐसा कर सकते हैं।

आप अपनी थीम को एक अलग संगीतकार पैकेज में रख सकते हैं। आपको इसके लिए एक अलग रिपॉजिटरी बनाने की आवश्यकता होगी। Magento डॉक्स पहले से ही इस प्रक्रिया का वर्णन कर रहे हैं: "अपनी थीम को एक कम्पोजर पैकेज बनाएं" देखें

अब इसे अपनी थीम की composer.jsonफ़ाइल में जोड़ें :

{
    "extra": {
        "map": [
            [
                "dev/tools/grunt/configs/themes.js",
                "dev/tools/grunt/configs/themes.js"
            ],
            [
                "Gruntfile.js",
                "Gruntfile.js"
            ]
        ]
    }
}

सुनिश्चित करें कि पहला थीम आपके थीम पैकेज के अंदर सही स्थान पर है। पथ विषय की composer.jsonफ़ाइल के स्थान से सापेक्ष हैं ।


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


2
  • यह Jev Mokrousov के उत्तर का पूरक उत्तर है
  • मैगेंटो 2.1 के लिए लिखा गया है (मुझे बताया गया है कि मैगेंटो 2.2 इसके समाधान में बेहतर होगा)

जैसा कि मुझे यकीन है कि कई लोग खरोंच से एक विषय बनाने के बजाय खुद को एक मूल विषय का विस्तार करते हुए पाएंगे , यहां आपकी themes.yourThemeName.jsफ़ाइल के लिए कुछ अलग वाक्यविन्यास प्रस्तुत किया गया है । अपने विषय के लिए कॉन्फ़िगरेशन को पूरी तरह से परिभाषित करने के बजाय, हम इसे माता-पिता से प्राप्त करते हैं, और फिर जो नया / अलग है उसे जोड़ / संशोधित करते हैं।

इस उदाहरण में हम अपने विषय का नाम सेट कर रहे हैं, और अपने विषय की अतिरिक्त रूट फ़ाइल (ओं) को जोड़कर, रिक्त कॉन्फ़िगरेशन से विरासत में प्राप्त कर रहे हैं। इसका एक लाभ यह है कि आपको मूल विषय से सभी फाइलों को विशेष रूप से घोषित करने की आवश्यकता नहीं है। समय-समय पर अद्यतन प्राप्त करने वाले मूल विषय का विस्तार करने वाले लोगों के लिए यह लाभदायक हो सकता है। (यहाँ मेरे उदाहरण परिदृश्य के रूप में रिक्त का उपयोग करना शायद सबसे अधिक लागू स्थिति नहीं है, लेकिन यहाँ लागू अवधारणाएं क्या मायने रखती हैं)।

'use strict';

// If your theme's parent has it's own "themes.someOtherName.js" file, 
// require that file instead of Magento's native "themes.js" file.
var defaultThemes   = require('./themes'),
    _               = require('underscore');

// Update "blank" to the name of your parent theme's Grunt config.
// Update "<vendor>/<yourThemeName>"
var yourThemeNameConfig = _.extend(defaultThemes.blank, {name:'<vendor>/<yourThemeName>'});

// Change this to add your root files, add more as necessary
yourThemeNameConfig.files.push('css/new-file');

// Change "yourThemeName" to what you want to reference in your Grunt command.
module.exports = _.extend(defaultThemes, { yourThemeName: yourThemeNameConfig });
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.