วิธีการขยายการกำหนดค่า Magento 2 Grunt เริ่มต้นโดยไม่ต้องสัมผัส / แก้ไขไฟล์แกนเช่นGruntfile.js
และdev/tools/grunt/configs/themes.js
?
วิธีการขยายการกำหนดค่า Magento 2 Grunt เริ่มต้นโดยไม่ต้องสัมผัส / แก้ไขไฟล์แกนเช่นGruntfile.js
และdev/tools/grunt/configs/themes.js
?
คำตอบ:
การสร้างชุดรูปแบบใหม่สำหรับ Magento 2 อาจเป็นสิ่งที่ท้าทายแม้กระทั่งเคยมีประสบการณ์กับ Magento มาก่อน ผู้พัฒนาที่มีชื่อเสียงจะไม่เปลี่ยนไฟล์หลักของวีโอไอพี แต่สร้าง "wrappers" แทนดังนั้นในอนาคตการติดตั้งแพตช์และทำการอัปเดตคุณจะไม่มีสถานการณ์เมื่อการเปลี่ยนแปลงทั้งหมดของคุณถูกแทนที่หรือถูกผสานอย่างไม่ถูกต้อง
ขยายไฟล์ Gruntfile.js และ themes.js
สมมติว่าคุณสร้างชุดรูปแบบใหม่และดังที่เราทราบจากเอกสารประกอบMagento 2คุณจะต้องเปลี่ยนไฟล์ที่dev/tools/grunt/configs/themes.js
เพิ่มธีมของคุณลงในรายการดังนั้น Grunt สามารถรวบรวม / symlink / คัดลอกไฟล์ css / less ใน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 สำหรับธีมของคุณเช่น:
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
อยู่ในไดเรกทอรี configs ที่ themes.yourthemename.js
ซึ่งทำให้ผมเชื่อว่าไฟล์เหล่านี้จะแล้วจะหายไปรูปแบบของเราที่เพิ่มใหม่จาก การตั้งค่านี้ยังใช้งานได้ฉันไม่สามารถระบุสาเหตุของRequired config property "clean.yourthemename" missing.
ข้อผิดพลาดของฉันได้...
เมื่อโซลูชันของ Jev Mokrousovไม่เหมาะกับคุณมีสองทางเลือกที่คุณสามารถลองได้:
ระหว่างการติดตั้งmagento/magento2-base
แพคเกจไฟล์Gruntfile.js
และโฟลเดอร์dev/tools
จะถูกคัดลอกจากแพ็คเกจไปยังโฟลเดอร์รากของคุณเขียนทับไฟล์ที่มีอยู่ใด ๆ ที่เกิดจากการcomposer.json
แม็พฐานของ Magento2 (ดู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
แพคเกจคือการจับคู่ไฟล์ลงในรูทของโครงการ (ดังที่อธิบายไว้ด้านบน) คุณสามารถทำได้ด้วยตัวเอง
คุณสามารถใส่ธีมของคุณในแพ็คเกจนักแต่งเพลงแยกต่างหาก คุณจะต้องสร้างที่เก็บแยกต่างหากสำหรับสิ่งนี้ เอกสาร 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
ไฟล์ของคุณ แทนที่จะกำหนดอย่างสมบูรณ์ตั้งแต่เริ่มต้นการกำหนดค่าสำหรับชุดรูปแบบของเราเรารับมาจากผู้ปกครองแล้วผนวก / แก้ไขสิ่งที่ใหม่ / แตกต่างกัน
ในตัวอย่างนี้เรากำลังสืบทอดจากการกำหนดค่าของเปล่าตั้งชื่อธีมของเราและเพิ่มไฟล์รูทเพิ่มเติมของธีม ข้อดีของการทำเช่นนี้คือคุณไม่จำเป็นต้องประกาศไฟล์ทั้งหมดจากธีมหลัก สำหรับคนที่ขยายธีมผู้ปกครองที่ได้รับการปรับปรุงเป็นระยะนี้อาจเป็นประโยชน์ (การใช้ blank เป็นตัวอย่างสถานการณ์ของฉันที่นี่อาจไม่ใช่สถานการณ์ที่เหมาะสมที่สุด แต่แนวคิดที่นำมาใช้ที่นี่เป็นสิ่งสำคัญ)
'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 });