Мастер @imports A & B,
B @ импорт A
При использовании миксина из A в мастер-файле свойства дублируются
Дополнительную информацию см. В модульном тесте.
Конфигурация: lessc cli версии 1.0.21 на ubuntu 10.04
Думаю, проблема в том, что файл импортируется дважды, это правильное поведение для миксинов.
Как вы думаете, следует ли импортировать файл дважды? В противном случае следует также учитывать относительные URL-адреса. Например
// in main.less
<strong i="6">@import</strong>: imports/import1.less;
<strong i="7">@import</strong>: imports/import2.less;
// in imports/import1.less
<strong i="8">@import</strong>: import2.less; // don't import this
<strong i="9">@import</strong>: imports/import2.less; // do import this
хммм, мне интересно, есть ли более простой способ проверить, равен ли файл другому файлу. Может что-то в заголовках.
Размер файла - дешевый показатель, и он, скорее всего, уникален в любом заданном наборе исходных файлов. Однако _ возможно_ иметь 2 файла одинакового размера.
Аналогично с датой изменения.
Если сервер устанавливает заголовок ETag, вы можете / должны его использовать.
Мы используем MD5-хэш содержимого файла в качестве ключа при кешировании, но я лично считаю, что это излишне.
хммм, да, проблема в том, что у javascript нет собственного MD5, иначе я бы использовал это ..
ETag был бы идеальным, но некоторые серверы не устанавливают его. Я должен об этом подумать.
Похоже, мы согласны с тем, что файлы не следует импортировать дважды. Однако всегда ли это правда? (т.е. с помощью области видимости, импорт в миксим может быть приемлемым - облачко, вы можете ответить лучше, чем я).
Многие языки уже решили эту проблему по-разному:
#ifndef
/ #define
/ #endif
include_once()
«Способ C» может быть немного сложнее реализовать, но условные выражения могут предложить другие большие возможности.
Если выбран «путь PHP», нам нужно выбрать способ различать файлы. Абсолютный URL-адрес кажется хорошим выбором (у нас он есть либо напрямую, либо через document.location + relative URL) - я думаю, что он лучше, чем size / length / MD5, потому что он не использует HTTP-запрос.
Однако этого может быть недостаточно: каждый URL-адрес отображается в один файл, но каждый файл может быть сопоставлен с несколькими URL-адресами. В таком случае может помочь введение нового ключевого слова @<strong i="16">@name</strong>: <unique name>
.
Тогда алгоритм @import_once будет выглядеть следующим образом: если абсолютный URL-адрес еще не был импортирован, получить файлы и проверить, импортировано ли уже @ @name , если не импортировать файл.
Я согласен. в контексте одного запроса вы должны иметь возможность предположить, что ресурсы не меняются. поэтому абсолютные URL-адреса должны быть достаточно хорошими.
проверка изменений файлов - другое дело.
Я думаю, что нам следует сохранять @import import несколько раз, потому что именно так работает оригинальный @import ,
Мне нравится php-подобное решение @vicb , но вместо
можем ли мы добавить что-то подобное в начало файла .less:
/ _! требуется: url (./abc.less)_/
Я тоже испытываю эту проблему. В моем проекте есть иерархия МЕНЬШЕ файлов, скомпилированных в один файл .css. Есть один служебный файл LESS, который включен в несколько файлов, в конечном итоге все миксины дублируются столько же раз, сколько этот служебный файл был импортирован.
@Import_once или, возможно, @import :
Мы сталкиваемся с той же проблемой, что и @NielsJanssen в нашем проекте, любая идея, когда эта проблема будет исправлена?
Тоже сталкиваюсь с этой проблемой. Кто-нибудь придумал решение?
Здесь такая же проблема. Не удалось найти простого решения, просто пришлось переупорядочить импорт, чтобы он не импортировался дважды.
Я бы действительно посоветовал проверить Stylus, если вы используете node.js. Некоторое время я использовал LESS, разочаровался из-за его полного отсутствия, переключился на SASS, а затем, наконец, на Stylus. Он действительно использует функции, синтаксис является необязательным (и я использую компромисс), он очень мощный, и TJ - действительно отзывчивый разработчик.
Если вы не используете node.js, вы все равно можете использовать Stylus с ruby и компилировать на своем компьютере. И если вам не нравится Stylus по какой-либо причине, SASS / SCSS также является хорошей альтернативой и может быть реализован таким же образом.
Короче говоря: в долгосрочной перспективе МЕНЬШЕ не годится.
Очень плохое отношение к человеку.
Нет необходимости размещать здесь эту задницу. Вы могли отправить его по почте или другим способом. У вас не может быть таких высоких стандартов, как «действительно отзывчивый разработчик» для чего-то, что можно использовать бесплатно.
Точно нет.
Мне бы понравился этот совет, когда я впервые нашел LESS, так что я не тратил недели своего времени на то, чтобы привыкнуть к нему и преобразовать его и от него, когда я в конце концов ушел. Конечно, я должен был сначала заметить это, так как открытых вопросов больше, чем закрытых, и на большинство из них не ответили.
Дело не в том, какие стандарты у меня есть, а какие у меня нет. Речь идет о предупреждении людей, когда есть лучшие альтернативы.
Так что я поддерживаю свою "BS" и надеюсь, что люди сочтут это предупреждение полезным.
@ianstormtaylor : сказать, что проект «не годится в долгосрочной перспективе», немного истерично.
с такой же проблемой.
foo.less
<strong i="7">@import</strong> "bar.less";
<strong i="8">@import</strong> "baz.less";
bar.less
<strong i="12">@import</strong> "mixins.less";
.bar {
.mixer
}
baz.less
<strong i="16">@import</strong> "mixins.less";
.baz {
.mixer
}
mixins.less
.mixer {
color: 000;
border: 2px solid #fff;
}
$ lessc foo.less
.mixer {
color: 000;
border: 2px solid #fff;
}
.bar {
color: 000;
border: 2px solid #fff;
color: 000;
border: 2px solid #fff;
}
.mixer {
color: 000;
border: 2px solid #fff;
}
.baz {
color: 000;
border: 2px solid #fff;
color: 000;
border: 2px solid #fff;
}
Раньше я не участвовал в этом обсуждении, но теперь, когда я столкнулся с той же проблемой ... @ianstormtaylor вообще в истерике. просто проверьте список открытых вопросов для этого проекта и как долго некоторые из них были открыты. less - полезный инструмент, но я думаю, что это справедливая оценка того, что поддержка ограничена, и это очень расстраивает во время ожидания.
у меня сложилось впечатление, что @cloudhead в основном игнорирует любые
У вас _could_ просто есть файл main.less
, содержащий все ваши импортированные файлы. См. Пример начальной загрузки twitter (главный файл - bootstrap.less
).
некоторые из файлов less, которые я импортирую (из внешней библиотеки), написаны для автономной компиляции, поэтому каждый из них включает общий variables.less
и проблема, которую я вижу, возникает из-за того, что я импортирую каждый из этих less файлов в один основной файл, а затем при компиляции этого файла каждый миксин применяется столько раз, сколько миксины включены (один раз для каждого файла, который я включаю из внешней библиотеки).
вы правы - я _ могу_ сделать что-то вроде того, что вы предложили, и я _am_ делаю что-то подобное в коде, который я полностью контролирую, но это не значит, что все так делают.
кроме того, обходной путь (_только_, если я не использовал стороннюю библиотеку) не меняет того, что это ошибка. Я хорошо знаком с тем, как обходить проблемы с меньшими затратами, но меня расстраивает то, что подобные ошибки открываются уже почти 18 месяцев. ( @wlangstroth, я понимаю, что это не твоя вина)
для всех, кому интересно, у меня есть исправление грубой силы (не тестировалось на тесте @vicb , но должно работать), которое я вставил в комментарий к # 431. Я постараюсь найти лучшее решение, если у меня будет больше времени.
с такой же проблемой
Также была эта проблема, но исправлена путем импорта моих библиотек миксинов в мой bootstrap.less. Не понимал, что последующий импорт будет иметь к ним доступ, но это имеет смысл.
fyi # 431 - это запрос на перенос, который устраняет эту проблему.
@cloudhead Не
Тот же выпуск :-(
В качестве предложения всем, у кого возникают проблемы с этой проблемой, я бы порекомендовал вам отправить Алексис сообщение в Twitter. Алексис ранее говорил в нескольких тикетах, что он не может отслеживать все проблемы и на самом деле исправляет только тогда, когда ему сообщают о серьезности. Я считаю, что это серьезная проблема, но не смог привлечь внимание Алексис в Твиттере.
Возможно, кому-то еще повезет больше.
Twitter: https://twitter.com/#!/cloudhead
И напишите ссылку на эту проблему: https://github.com/cloudhead/less.js/issues/49.
@Kalyse, если @cloudhead не может адекватно отслеживать проблемы этого проекта, то это еще
зачем мне использовать твиттер, чтобы привлечь чье-то внимание, когда они уже могут получать предупреждения, когда я упоминаю их в проблеме? Я считаю позорным, что @cloudhead не может ответить на вопросы, которые были открытыми в течение двух лет - он мог бы хотя бы найти пару человек, которым он доверяет, и заставить их работать над накопившимися нерешенными проблемами. они могли бы, по крайней мере, закрыть дубликаты и помочь уменьшить количество открытых вопросов для него.
Система уведомлений github совершенно бесполезна - я получаю около 70-100 уведомлений в день, поэтому предпочитаю их просто игнорировать.
Я собираюсь разобраться в этом ...
Хорошо, я добавил директиву @import-once
- она довольно примитивна, поскольку проверяет только совпадение путей, но должна охватывать большинство случаев использования.
@cloudhead Рад, что вы
Я лично не понимаю, почему этот проект даже на Github, если запросы на вытягивание даже не рассматриваются, или почему трекер проблем даже работает, если проблемы игнорируются.
Легкие люди! Если бы у кого-то был такой популярный проект, они бы оказались в одной лодке. @cloudhead проделал отличную работу и, возможно, ему нужно добавить несколько доверенных людей в качестве администраторов. Но проблемы с запросами на вытягивание и тестами гораздо полезнее, чем одни проблемы. Может быть, исправим какие-нибудь проблемы, пока расслабляешься.
Люди исправляли множество проблем, иногда много лет назад. Посмотрите один из 74 невыполненных запросов на вытягивание, но без ответа. Например, в этом выпуске много дураков за 2 года (например, # 324 # 71). Вот запрос на перенос, который устранил бы эту проблему довольно просто: https://github.com/cloudhead/less.js/pull/431 Коммитер запросил обратную связь, был встречен молчанием, а затем в конце концов сдался.
@cloudhead - Алексис, это слишком прийти в упадок. Когда люди видят вещи, упомянутые выше, у них создается впечатление, что проект ненадежен или ненадежен. И это лишнее! Магия github в том, что вы можете легко найти людей, которые пишут отличный код и заинтересованы в участии в проекте. Спросите у этих хороших людей, помогут ли они в решении проблем и pull-реквестов.
Все мы любим вашу работу. Сообщество хочет помочь. Позвольте нам помочь!
@jeremyricketts - хорошее замечание.
Я согласен с @jeremyricketts - в компании, в которой я работаю, мы
@cloudhead похоже, что директива @import-once
не работает, это мой тестовый пример.
// a.less
.gain-bfc() {
overflow: hidden;
*zoom: 1;
}
// b.less
@import-once "a.less";
// c.less
@import-once "a.less";
@import-once "b.less";
div {
.gain-bfc();
}
после компиляции c.less
ожидаемый результат должен быть
div {
overflow: hidden;
*zoom: 1;
}
но у меня есть дублированные свойства
div {
overflow: hidden;
*zoom: 1;
overflow: hidden;
*zoom: 1;
}
+1 Джеремирикеттс
кто-нибудь хочет подойти - https://twitter.com/#!/neonstalwart/status/183247994072735744
Нужен кто-то с некоторыми реальными навыками программирования. Мой мир - это PSD, карандаш и бумага, HTML CSS и легкая работа с jQuery.
Пара человек нужна только для сортировки проблем и запросов на вытягивание,
удалите дубликаты, убедитесь, что есть тестовые примеры на наличие ошибок и т. д. Я бы хотел
добровольно помочь с этим по крайней мере, и я, вероятно, смогу помочь
закройте и более мелкие ошибки.
23 марта 2012 г., 13:28, "Джереми Рикеттс" <
[email protected]>
написал:
Нужен кто-то с некоторыми реальными навыками программирования. Мой мир - это PSD,
карандаш и бумага, HTML CSS и легкая работа с jQuery.Ответьте на это письмо напрямую или просмотрите его на GitHub:
https://github.com/cloudhead/less.js/issues/49#issuecomment -4667283
@cloudhead На всякий случай, если вы изо всех сил @neonstalwart некоторое время назад.
По сути, правила никогда не следует добавлять к селекторам, если существует правило с тем же значением, что и текущее свойство. Вы также должны проверить значение свойства, поскольку с фонами вы можете добавить несколько разных фонов, поскольку они по-разному обрабатываются в разных браузерах.
Что вы думаете об этом решении @cloudhead
Кажется, путь вперед?
Не исправить это означает:
1) Файлы больше, чем должны быть.
2) Распространение вашего CSS по нескольким файлам и импорт партий становится нежелательным, потому что каждый раз, когда вы включаете дополнительный файл, который также включает миксины, вы снова добавляете значения этого миксина. У меня может быть на 80 стилей CSS меньше, а это означает, что когда я выполняю смешивание градиентов .background (), получается 80 * 6 дополнительных стилей для каждого селектора. (6 для поддержки всех браузеров).
3) Это также замедляет рендеринг страниц. Мои отрисовки / обновления в секунду резко упали из-за дополнительных стилей.
Мысли @cloudhead ?
Ваше здоровье.
@cloudhead Если мы сделаем
@Kalyse, можешь [email protected]
Ваше здоровье
Может быть, нужны дополнительные доверенные разработчики, которые могут утверждать запросы на включение?
@cloudhead Я использую WinLess для компиляции моего кода LESS ... WinLess поставляется с последним дистрибутивом less.js (см. https://github.com/marklagendijk/WinLess/issues/14), поэтому любая идея, когда это (и другие исправления ) будет добавлен в последний выпуск?
Спасибо за отличный продукт).
так, эээ ... Как мы с этим справляемся?
@jreading Я думаю, что это было исправлено в git с фиксацией cb7893
Кажется исправленным (или, по крайней мере, исходная проблема), а если нет, я уверен, что есть еще одна ошибка, которая устраняет это.