Gruntfile.js
এবং এর মতো মূল ফাইলগুলি স্পর্শ / সম্পাদনা না করে ডিফল্ট ম্যাজেন্টো 2 গ্রান্ট কনফিগারেশন কীভাবে প্রসারিত করবেন dev/tools/grunt/configs/themes.js
?
Gruntfile.js
এবং এর মতো মূল ফাইলগুলি স্পর্শ / সম্পাদনা না করে ডিফল্ট ম্যাজেন্টো 2 গ্রান্ট কনফিগারেশন কীভাবে প্রসারিত করবেন dev/tools/grunt/configs/themes.js
?
উত্তর:
ম্যাজেন্টো 2 এর জন্য নতুন থিম তৈরি করা এমনকি চ্যালেঞ্জ হতে পারে এমনকি ম্যাজেন্টোর সাথে অভিজ্ঞতাও ছিল। শালীন বিকাশকারীরা মূল ম্যাজেন্টো ফাইলগুলি পরিবর্তন করবেন না, পরিবর্তে "মোড়ক" তৈরি করবেন, সুতরাং ভবিষ্যতে প্যাচগুলি ইনস্টল করার সময় এবং আপডেটগুলি করার সময় আপনার সমস্ত পরিবর্তন ওভাররাইড হয়ে গেলে বা ভুলভাবে মার্জ হয়ে গেলে আপনার পরিস্থিতি তৈরি হবে না।
গ্রান্টফিল.জেএস এবং থিম.জেএস ফাইলগুলি প্রসারিত করুন
আসুন ধরা যাক আপনি নতুন থিম তৈরি করেছেন এবং যেমন ম্যাজেন্টো 2 ডক্স ডকুমেন্টেশন থেকে আমরা জানি যে dev/tools/grunt/configs/themes.js
আপনার থিমটি তালিকায় যুক্ত করে ফাইল পরিবর্তন করতে হবে , যাতে গ্রান্ট pub/static
ফোল্ডারে সংকলন / সিমিলিং / অনুলিপি সিএসএস / কম ফাইল তৈরি করতে পারে ।
পদক্ষেপ 1: /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);
পদক্ষেপ 2: 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);
স্টিপি 3: এখন আপনি আপনার থিমের জন্য গ্রান্ট কাজগুলি চালাতে পারেন যেমন:
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.
ত্রুটির কারণটি নির্ধারণ করতে পারি না ...
যখন জেভ মোকরোসভের সমাধান আপনার পক্ষে উপযুক্ত নয়, আপনি চেষ্টা করতে পারেন এমন দুটি বিকল্প রয়েছে:
magento/magento2-base
প্যাকেজটি ইনস্টল করার সময় ফাইল Gruntfile.js
এবং ফোল্ডারটি dev/tools
প্যাকেজ থেকে আপনার মূল ফোল্ডারে অনুলিপি করে কোনও বিদ্যমান ফাইল ওভাররাইট করে, যা ম্যাজেন্টো 2 বেস 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
ম্যাগন্টোসের মূল বিষয়গুলির মধ্যে এই ফাইলগুলির আমাদের সংস্করণটি অনুলিপি করতে সুরকারের ইভেন্টে প্রবেশ করতে পারি। আপনার আপনার প্রকল্পের এটিতে যুক্ত করা উচিত 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
প্যাকেজ (উপরে বর্ণিত) প্রকল্পের মূল ফাইল ম্যাপিং হয় এছাড়াও আপনি এই নিজে করতে পারেন।
আপনি আলাদা আলাদা সুরকার প্যাকেজে আপনার থিম রাখতে পারেন। এর জন্য আপনাকে একটি পৃথক ভান্ডার তৈরি করতে হবে। ম্যাজেন্টো ডক্স ইতিমধ্যে এই প্রক্রিয়াটির বর্ণনা দিচ্ছে: "আপনার থিমকে একটি সুরকার প্যাকেজ তৈরি করুন" দেখুন
এখন আপনার থিমের 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 });