Я ищу лучший способ избежать глобальных диффузных переменных.
Я сделал тест с этой конфигурацией:
_import.less
@test: #FFF;
_import2.less
@test: #000;
без теста
@import (reference) "_import";
body {
background: @test;
}
test2.less
@import (reference) "_import2";
div {
background: @test;
}
без индекса
@import "test";
@import "test2";
Вывод с lessc index.less test.css по-прежнему выглядит как
body {
background: #000;
}
div {
background: #000;
}
Но то, что я ищу, это:
body {
background: #FFF;
}
div {
background: #000;
}
Использование менее 2,7 или 3,9 дает такое же поведение.
Кто-нибудь знает решение?
Спасибо






Вы всегда можете изолировать область чего-либо (включая импортированный файл), используя «безымянное пространство имен», то есть & {}, блокировать.
Например.:
без теста:
@import "_import";
body {
background: @test;
}
test2.less:
@import "_import2";
div {
background: @test;
}
без индекса:
& {@import "test";}
& {@import "test2";}
В зависимости от ваших целей эти & {} блоки можно переместить прямо в сами test файлы.
Ссылка: Область действия локальных переменных в файлах импорта
это интересно. не знал об этом. Что может быть примером веской причины для использования этого? Я считаю, что ОП даже не выиграет, потому что зачем вообще его импортировать, если вы собираетесь его расширить?
@soulshined Я предполагаю, что типичным вариантом использования является объединение несвязанных библиотек/компонентов (с использованием одинаковых имен переменных) в одну. И/или что-то вроде это.
Просто спасибо, это круто. Doc должен быть улучшен, потому что нет возможности легко найти
Это предусмотрено дизайном: При двойном определении переменной используется последнее определение переменной, поиск осуществляется из текущей области видимости вверх.ссылка Если вы хотите избежать этого, используйте другую переменную или динамически импортируйте файлы (в зависимости от условия)