Есть ли разница между расширением темы с помощью _module.less
и _extend.less
? И какова лучшая практика при расширении модуля / темы?
Сначала я подумал, что лучше использовать его _module.less
при стилизации нового модуля и _extend.less
при расширении модуля. Но Luma использует _module.less
при расширении пустой темы, чтобы теория ушла в окно.
Единственное различие, которое я вижу между ними, заключается в _module.less
том, что они импортируются перед отзывчивой библиотекой и _theme.less
куда как _extend.less
импортируются после них.
Это порядок, в который они импортируются vendor/magento/theme-frontend-blank/web/css/styles-l.less
//
// Blank theme desktop styles
// _____________________________________________
// These desktop styles are added to mobile
//
// Global lib + theme styles
// ---------------------------------------------
@import '_styles.less';
@import (reference) 'source/_extends.less';
//
// Magento Import instructions
// ---------------------------------------------
//@magento_import 'source/_module.less'; // Theme modules
//@magento_import 'source/_widgets.less'; // Theme widgets
//
// Media queries collector
// ---------------------------------------------
@import 'source/lib/_responsive.less';
@media-target: 'desktop'; // Sets target device for this file
@media-common: false; // Sets not to output common styles
//
// Global variables override
// ---------------------------------------------
@import 'source/_theme.less';
//
// Extend for minor customisation
// ---------------------------------------------
//@magento_import 'source/_extend.less';
.less
файл в своей теме с тем же путем, что и файл в родительской теме / модуле, это переопределение. Вы можете проверить это, создав пустой _module.less в своей теме и посмотрев, применимы ли оригинальные стили.php bin/magento setup:static-content:deploy
вы можете просмотретьpub/static/frontend/<vendor>/<themeName>/<locale>/css/
и,pub/static/frontend/<vendor>/<themeName>/<locale>/<Module_Name>/css/
и там будут символические ссылки для файлов * .less либо на вашу тему, либо на тему модуля / родителя, из которой она взята.Простое объяснение или разница между ними:
_extend.less
это способ расширить / изменить родительские ТЕМЫ стилей, например , вы будете счастлив с вашей родительской темой Luma и просто хочет изменить стиль кнопки в вашей теме, все , что вам нужно сделать , это создать новый файл_buttons_extend.less
подweb/css/source
вашей пользовательскую тему и настроить стили там. Зарегистрируйте этот файл, добавив его в_extend.less
файл в каталоге вашей темы.Что делать, если вы хотите расширить стили модуля, например, модуль проверки, хорошо, вы можете создать
_extend.less
файл в папке модуля вашей темы, например,Magento_Checkout/web/css/source/_extend.less
и добавить / расширить стили модуля там.Теперь, если я добавил
_module.less
файл в каталог моего модуля,Magento_Checkout/web/css/source/_module.less
я намереваюсь переопределить стилизацию моих родительских тем для этого модуля, и в этом случае мне нужно скопировать_module.less
файл ' ' из каталога модуля моей родительской темы и внести изменения в этот файл, и в этом случае этот файл будет заменить родительский_module.less
файл тем вообще.источник
Символ
_extends.less
«S» в конце пустой темы представляет собой файл, в котором они создали все классы, которые могут быть расширеныLESS
позднее в рамках темы, без необходимости создания новых компонентов или модульной структуры для изменения стиля. -> Для тех, кто не верит мне: https://github.com/magento/magento2/blob/2.3-develop/app/design/frontend/Magento/blank/web/css/source/_extends.less проверьте файл._extend.less
Без S в конце концов, это когда вы 99% довольны тем , что родительская тема имеет и вам просто нужно изменить пару вещей, изменить некоторые стили и это все .Что касается последнего, мое личное мнение, не используйте его для собственной разработки. Это создает большой беспорядок позже. Сохраняйте свою структуру модульной
_module.less
для каждого модуля, который вы хотите настроить, и вы получите лучший результат и поддерживаемый проект в конце.источник