Less.js: повторяющиеся свойства при многократном @importing (вложенный @import)

Созданный на 25 июн. 2010  ·  49Комментарии  ·  Источник: less/less.js

Мастер @imports A & B,
B @ импорт A

При использовании миксина из A в мастер-файле свойства дублируются

Дополнительную информацию см. В модульном тесте.

Конфигурация: lessc cli версии 1.0.21 на ubuntu 10.04

Все 49 Комментарий

Думаю, проблема в том, что файл импортируется дважды, это правильное поведение для миксинов.

Как вы думаете, следует ли импортировать файл дважды? В противном случае следует также учитывать относительные 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 был бы идеальным, но некоторые серверы не устанавливают его. Я должен об этом подумать.

Похоже, мы согласны с тем, что файлы не следует импортировать дважды. Однако всегда ли это правда? (т.е. с помощью области видимости, импорт в миксим может быть приемлемым - облачко, вы можете ответить лучше, чем я).

Многие языки уже решили эту проблему по-разному:

  • C -> #ifndef / #define / #endif
  • PHP -> 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

Кажется исправленным (или, по крайней мере, исходная проблема), а если нет, я уверен, что есть еще одна ошибка, которая устраняет это.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги