Bagaimana cara memperpanjang konfigurasi Magento 2 Grunt default tanpa menyentuh / mengedit file inti seperti Gruntfile.js
dan dev/tools/grunt/configs/themes.js
?
Bagaimana cara memperpanjang konfigurasi Magento 2 Grunt default tanpa menyentuh / mengedit file inti seperti Gruntfile.js
dan dev/tools/grunt/configs/themes.js
?
Jawaban:
Membuat tema baru untuk Magento 2 bisa menjadi tantangan bahkan memiliki pengalaman dengan Magento sebelumnya. Pengembang yang layak tidak akan mengubah file inti Magento, tetapi membuat "pembungkus" sebagai gantinya, jadi di masa depan menginstal tambalan dan melakukan pembaruan Anda tidak akan memiliki situasi ketika semua perubahan Anda ditimpa atau digabungkan secara tidak benar.
Perpanjang file Gruntfile.js dan themes.js
Katakanlah Anda membuat tema baru dan seperti yang kita ketahui dari dokumentasi Magento 2 docs Anda perlu mengubah file dev/tools/grunt/configs/themes.js
menambahkan tema Anda ke daftar, sehingga Grunt dapat mengkompilasi / symlink / menyalin css / lebih sedikit file ke dalam pub/static
folder.
Langkah1: Buat /dev/tools/grunt/configs/themes.yourthemename.js
file yang memperluas themes.js
file default sebagai
'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: Perpanjang Gruntfile.js
dengan fileGruntfile.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);
Langkah 3: Sekarang Anda dapat menjalankan tugas Grunt untuk tema Anda seperti:
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
apakah Anda mendapatkan Warning: Required config property "clean.yourthemename" missing. Used --force, continuing.
?? Sungguh aneh saya bisa membersihkan tema saya dengan clean:yourthemename
perintah tetapi saya merasa exec
perintah harus melakukan ini tanpa kesalahan.
dev/tools/grunt/configs
melakukan require('./themes')
, contoh ada clean.js
dan exec.js
di dalam direktori konfigurasi. Yang membuat saya percaya bahwa file-file ini kemudian akan hilang dari tema baru yang ditambahkan themes.yourthemename.js
. Pengaturan ini masih berfungsi, saya tidak dapat menentukan penyebab Required config property "clean.yourthemename" missing.
kesalahan saya ...
Ketika solusi Jev Mokrousov tidak cocok untuk Anda, ada dua alternatif yang bisa Anda coba:
Selama instalasi magento/magento2-base
paket, file Gruntfile.js
dan folder dev/tools
akan disalin dari paket ke folder root Anda menimpa file yang ada, yang disebabkan oleh composer.json
pemetaan basis Magento2 (lihat vendor/magento/magento2-base/composer.json
di proyek Anda):
{
"extra": {
"map": [
[
"dev/tools",
"dev/tools"
],
[
"Gruntfile.js",
"Gruntfile.js"
]
]
}
}
Anda dapat menempatkan versi Anda Gruntfile.js
dan dev/tools/grunt/configs/themes.js
di suatu tempat (kami telah menempatkan mereka di dalam struktur direktori build kami di build/tools/grunt/
).
Sekarang ada kemungkinan untuk menambahkan perintah atau skrip tambahan sebelum atau setelah peristiwa Komponis tertentu. Kita bisa terhubung ke post-install-cmd
acara Composer untuk menyalin versi file-file ini di atas file inti Magento. Anda harus menambahkan ini ke proyek Anda composer.json
:
{
"scripts": {
"post-install-cmd": "cp -vfp build/tools/grunt/Gruntfile.js . && cp -vfp build/tools/grunt/themes.js dev/tools/grunt/configs/"
}
}
Ini akan menunjukkan kepada Anda:
> 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’
Sama seperti magento/magento2-base
paket ini memetakan file ke root proyek (seperti dijelaskan di atas) Anda juga dapat melakukan ini sendiri.
Anda dapat menempatkan tema Anda dalam paket Komposer yang terpisah. Anda harus membuat repositori terpisah untuk ini. Dokumen Magento sudah menggambarkan proses ini: lihat "Jadikan tema Anda paket Penggubah"
Sekarang tambahkan ini di composer.json
file tema Anda :
{
"extra": {
"map": [
[
"dev/tools/grunt/configs/themes.js",
"dev/tools/grunt/configs/themes.js"
],
[
"Gruntfile.js",
"Gruntfile.js"
]
]
}
}
Pastikan jalur pertama menunjuk ke lokasi yang tepat di dalam paket tema Anda. Jalur relatif dari lokasi composer.json
file tema .
Peringatan:
Kedua solusi tersebut menimpa file inti. Ini dapat menyebabkan masalah tambalan atau peningkatan. Saat menambal dan meningkatkan, Anda harus selalu memeriksa apa yang akan diubah dan menerapkan perubahan itu pada salinan file inti ini.
Karena saya yakin banyak orang akan menemukan diri mereka memperluas tema induk daripada sepenuhnya membangun tema dari awal, berikut adalah beberapa sintaks yang sedikit berbeda yang ditawarkan untuk themes.yourThemeName.js
file Anda . Daripada sepenuhnya mendefinisikan dari awal konfigurasi untuk tema kita, kita mewarisinya dari induknya, dan kemudian menambahkan / memodifikasi apa yang baru / berbeda.
Dalam contoh ini kita mewarisi dari konfigurasi blank, mengatur nama tema kita, dan menambahkan file root tambahan tema kita. Manfaatnya adalah Anda tidak harus secara khusus mendeklarasikan semua file dari tema induk. Bagi orang-orang yang memperpanjang tema orang tua yang menerima pembaruan secara berkala, ini bisa bermanfaat. (Menggunakan kosong sebagai skenario contoh saya di sini mungkin bukan situasi yang paling berlaku, tetapi konsep yang diterapkan di sini adalah yang penting).
'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 });