मूलभूत फ़ाइलों को बिना टच / एडिटिंग के जैसे डिफ़ॉल्ट Magento 2 ग्रन्ट कॉन्फ़िगरेशन को कैसे बढ़ाया जाए Gruntfile.js
और dev/tools/grunt/configs/themes.js
?
मूलभूत फ़ाइलों को बिना टच / एडिटिंग के जैसे डिफ़ॉल्ट Magento 2 ग्रन्ट कॉन्फ़िगरेशन को कैसे बढ़ाया जाए Gruntfile.js
और dev/tools/grunt/configs/themes.js
?
जवाबों:
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
exec:yourthemename
तो आपको मिलता है Warning: Required config property "clean.yourthemename" missing. Used --force, continuing.
?? यह अजीब है मैं clean:yourthemename
कमांड के साथ अपने विषय को साफ करने में सक्षम हूं, लेकिन मुझे लगता है कि exec
कमांड को त्रुटि के बिना ऐसा करना चाहिए।
dev/tools/grunt/configs
एक प्रदर्शन करती हैं require('./themes')
, उदाहरण हैं clean.js
और exec.js
उस निर्देशिका के अंदर। जो मुझे विश्वास दिलाता है कि ये फाइलें तब हमारे नए जोड़े गए विषय को याद कर रही होंगी themes.yourthemename.js
। फिर भी यह सेटअप काम करता है मैं सिर्फ अपनी Required config property "clean.yourthemename" missing.
त्रुटि का कारण निर्धारित नहीं कर सकता ...
जब 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-cmd
Magento के प्रमुख लोगों पर इन फ़ाइलों के हमारे संस्करणों की प्रतिलिपि बनाने के लिए संगीतकार की घटना में हुक कर सकते हैं। आपको इसे अपनी परियोजना में जोड़ना चाहिए 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
फ़ाइल के स्थान से सापेक्ष हैं ।
चेतावनी:
दोनों समाधान कोर फ़ाइलों को अधिलेखित कर रहे हैं। यह पैच या अपग्रेड समस्याओं का कारण बन सकता है। पैचिंग और अपग्रेड करते समय आपको हमेशा जांचना चाहिए कि क्या बदलने वाला है और इन कोर फ़ाइलों की अपनी प्रतियों में उन परिवर्तनों को लागू करें।
जैसा कि मुझे यकीन है कि कई लोग खरोंच से एक विषय बनाने के बजाय खुद को एक मूल विषय का विस्तार करते हुए पाएंगे , यहां आपकी 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 });