Подтвердить что ты не робот

IItemTransform и существующие мини файлы

TL; DR: IItemTransform не выполняется, когда мини файл уже существует в той же папке, что и исходный (не уменьшенный) файл.

Объяснение проблемы

У меня эта проблема в основном из-за ссылок на относительные изображения CSS. Если вы использовали IItemTransform с файлами Javascript, то это же относится.

Это то, что я использую:

  • Я использую Visual Studio с веб-Essentials addin для поддержки файлов LESS.
  • Я пишу файлы LESS и добавляю веб-Essentials, чтобы автоматически минимизировать файлы при сохранении
  • Я также использую связывание и минимизацию в своем проекте
  • При создании наборов CSS я использую CssRewriteUrlTransform, чтобы сделать URL-адреса CSS абсолютными (например, фоновые изображения), чтобы изображения все еще работали после объединения нескольких файлов CSS вместе

Пока ничего необычного, но это не работает.

Какая проблема?

Как работает сборка и минимизация, он пытается избежать чрезмерной обработки. Это означает, что когда миниатюрный файл существует в той же папке, что и исходный, он не будет запускать свою собственную минификацию и скорее обслуживать существующий файл.

Это было бы все в порядке, если бы он выполнял, по крайней мере, преобразования над этими ранее существующими мини файлами. Но это не так. Таким образом, я получаю относительные URL-адреса в пакете, который сильно разбивает все эти ресурсы.

Обходные

  • Всегда предоставлять абсолютные пути в файлах LESS
  • Отключить мини-настройку файла при сохранении в настройках веб-Essentials
  • Обратите внимание на мини файлы при определении моих пакетов, потому что у них нет мини-версии (*.min.css doens't имеет *.min.min.css), поэтому minifier фактически подбирает файл и минимизирует а также выполняет преобразования над ним.

С точки зрения моего процесса разработки и используемых инструментов (и настроенных так, как они есть) это выглядит как ошибка. Если эти файлы будут результатом одного и того же процесса минимизации, это не будет ошибкой вообще, поскольку преобразования будут выполняться при выполнении минимизации. Верно, что таких функций не существует и, вероятно, никогда не будет, поскольку для приложения потребуется разрешение на запись, чтобы заставить его работать. Результат: это ошибка. Существующие миниатюрные файлы должны быть обработаны с помощью преобразований до кэширования.

Вопрос

Можно ли каким-то образом убедить связывание и минимизацию:

  • не использовать существующие версии мини файлов
  • выполнить преобразования поверх существующих мини-версий
4b9b3361

Ответ 1

Рассматривали ли вы использование Grunt? http://gruntjs.com/

У него есть кривая обучения, но информационный пул огромен. Проблемы, с которыми вы сталкиваетесь в Интернете, не будут проблемой для ворчания.

Теперь я использую его в VS, чтобы минимизировать, связывать и транслировать как css, так и javascript, а также реорганизовывать файлы в каталог развертывания. После того, как вы настроите структуру каталогов, файл grunt можно легко использовать повторно.

С надстройкой в ​​VS (см. ниже) вы можете щелкнуть правой кнопкой мыши по файлу grunt и выбрать задачи grunt для запуска из всплывающего меню.

https://visualstudiogallery.msdn.microsoft.com/dcbc5325-79ef-4b72-960e-0a51ee33a0ff

"задачи" Grunt, поскольку они называются, могут быть созданы путем загрузки различных плагинов, т.е. https://www.npmjs.com/package/grunt-contrib-less.

Ответ 2

Я никогда не использовал МЕНЬШЕЕ или веб-необходимое, поэтому, пожалуйста, возьмите это сообщение за то, что он стоит (не так много). Не могли бы вы добавить команду pre-build для простого удаления старых файлов, а затем выполнить перестройку, когда вам нужно обновить CSS.