Jak rozszerzyć domyślną konfigurację Magento 2 Grunt bez dotykania / edytowania podstawowych plików, takich jak Gruntfile.js
i dev/tools/grunt/configs/themes.js
?
Stworzenie nowego motywu dla Magento 2 może być wyzwaniem, nawet jeśli wcześniej miałeś doświadczenie z Magento. Przyzwoici programiści nie zmieniają podstawowych plików Magento, ale zamiast tego tworzą „opakowania”, więc w przyszłości instalując łatki i wykonując aktualizacje, nie będziesz mieć sytuacji, gdy wszystkie twoje zmiany zostaną zastąpione lub niepoprawnie scalone.
Rozszerz pliki Gruntfile.js i themes.js
Załóżmy, że utworzyłeś nowy motyw i jak wiemy z dokumentacji Magento 2 doc , będziesz musiał zmienić plik dev/tools/grunt/configs/themes.js
dodając motyw do listy, aby Grunt mógł skompilować / symlink / skopiować css / mniej plików do pub/static
folderu.
Krok 1: Utwórz /dev/tools/grunt/configs/themes.yourthemename.js
plik, który rozszerza domyślny themes.js
plik jako
'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);
Krok 2: Rozszerz za Gruntfile.js
pomocą plikuGruntfile.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);
Krok 3: Teraz możesz uruchomić zadania Grunt dla swojego motywu, takie jak:
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
, dostajeszWarning: Required config property "clean.yourthemename" missing. Used --force, continuing.
? Dziwne, że jestem w stanie wyczyścić mój motyw za pomocąclean:yourthemename
polecenia, ale wydaje mi się, żeexec
polecenie powinno to zrobić bez błędu.dev/tools/grunt/configs
wykonaćrequire('./themes')
, przykładyclean.js
iexec.js
wewnątrz tego katalogu configs. Co prowadzi mnie do wniosku, że w tych plikach będzie brakować naszego nowo dodanego motywuthemes.yourthemename.js
. Mimo to ta konfiguracja działa, po prostu nie mogę ustalić przyczyny mojegoRequired config property "clean.yourthemename" missing.
błędu ...Kiedy rozwiązanie Jev Mokustyova ci nie pasuje, możesz wypróbować dwie alternatywy:
Polecenie kompozytora po instalacji
Podczas instalacji
magento/magento2-base
pakietu plikGruntfile.js
i folderdev/tools
zostaną skopiowane z pakietu do folderu głównego, zastępując wszystkie istniejące pliki, spowodowane przez podstawowecomposer.json
mapowanie Magento2 (patrzvendor/magento/magento2-base/composer.json
w projekcie):Możesz umieścić swoje wersje
Gruntfile.js
idev/tools/grunt/configs/themes.js
gdzieś (umieściliśmy je w naszej strukturze katalogu kompilacjibuild/tools/grunt/
).Teraz istnieje możliwość dodania dodatkowych poleceń lub skryptów przed lub po określonych zdarzeniach Composer. Moglibyśmy dołączyć do
post-install-cmd
wydarzenia Kompozytora, aby skopiować nasze wersje tych plików na podstawowe Magento. Powinieneś dodać to do swojego projektucomposer.json
:To pokaże ci:
Motyw jako moduł kompozytora
Podobnie jak
magento/magento2-base
pakiet mapuje pliki do katalogu głównego projektu (jak opisano powyżej), możesz to zrobić sam.Możesz umieścić swój motyw w osobnym pakiecie kompozytora. W tym celu musisz utworzyć osobne repozytorium. Dokumenty Magento już opisują ten proces: patrz „Zrób swój motyw jako pakiet kompozytora”
Teraz dodaj to do
composer.json
pliku swojego motywu :Upewnij się, że pierwsza ścieżka wskazuje właściwą lokalizację w pakiecie motywów. Ścieżki są względne od położenia
composer.json
pliku motywu .Ostrzeżenie:
oba rozwiązania zastępują podstawowe pliki. Może to powodować problemy z łatkami lub aktualizacjami. Podczas łatania i uaktualniania zawsze powinieneś sprawdzić, co będzie zmieniane i zastosować te zmiany w swoich kopiach tych podstawowych plików.
źródło
Ponieważ jestem pewien, że wiele osób rozszerzy kompozycję nadrzędną zamiast całkowicie budować kompozycję od podstaw, oto nieco inna składnia
themes.yourThemeName.js
pliku. Zamiast całkowicie definiować od podstaw konfigurację naszego motywu, dziedziczymy go od rodzica, a następnie dołączamy / modyfikujemy to, co nowe / inne.W tym przykładzie dziedziczymy z konfiguracji pustej, ustawiając nazwę motywu i dodając dodatkowe pliki główne naszego motywu. Zaletą tego jest to, że nie trzeba specjalnie deklarować wszystkich plików z kompozycji nadrzędnej. Może to być korzystne dla osób rozszerzających temat nadrzędny, które okresowo otrzymują aktualizacje. (Użycie pustego miejsca jako mojego przykładowego scenariusza tutaj prawdopodobnie nie jest najodpowiedniejszą sytuacją, ale znaczenie mają tu zastosowane tu pojęcia).
źródło