Как отключить разрешение URL-адресов в CSS в приложении Angular CLI

У меня есть простое приложение Angular CLI (6.0.7), в котором есть некоторые ресурсы в папке src/assets/. Некоторые из них упоминаются в файлах CSS компонентов Angular. Пример:

/* src/app/app.component.css */
.test-div {
    background: url(../assets/test.png);
}

Когда я создаю проект с помощью ng build, я получаю такую ​​структуру вывода:

dist/
  myapp/
    assets/
      test.png     <-- This one is simply copied from the src/asssets folder
    index.html
    main.js
    test.png       <-- This one is created by magic Angular CSS processing
    ...

Кроме того, CSS переписан так, чтобы он указывал на файл test.png в корне, а не на файл test.png в папке assets.

Мне такое поведение совсем не нравится. Я знаю, что есть некоторое преимущество при компиляции приложения в производственном режиме, который добавляет префикс хэша к файлам ресурсов, на которые ссылается CSS, чтобы предотвратить кеширование, но мне не нравится дублирование файлов и несоответствие между ресурсами, на которые ссылаются в CSS, и активами, на которые вручную ссылаются в Машинопись. Поэтому я бы предпочел отключить эту специальную обработку CSS, чтобы Angular не разрешал URL-адреса в CSS и сохранял URL-адреса как есть.

Итак, как я могу отключить эту волшебную обработку CSS Angular CLI?


person kayahr    schedule 10.07.2018    source источник
comment
Я тоже только что наткнулся на что-то подобное, вы нашли ответ?   -  person AsGoodAsItGets    schedule 20.07.2018
comment
@AsGoodAsitGets Нет. В настоящее время я живу с этой раздражающей функцией.   -  person kayahr    schedule 31.07.2018
comment
Только что сделал поиск, возможно, это поможет: github.com/angular/angular-cli/ вопросы/6599   -  person AsGoodAsItGets    schedule 31.07.2018


Ответы (1)


Сделать пути к шрифтам/изображениям абсолютными, как в /assets/fonts/myfont.woff, как описано здесь: https://github.com/angular/angular-cli/issues/6599#issuecomment-379039521 решил проблему для меня.

Это хак, но он работает.

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

person AsGoodAsItGets    schedule 31.07.2018
comment
Для меня это неприемлемо, потому что это требует, чтобы приложение всегда развертывалось в корневом каталоге веб-сайта из-за абсолютных URL-адресов и не могло работать в подпапках. Это даже больше раздражает, чем дублирование файлов. - person kayahr; 01.08.2018
comment
На самом деле нет, приложение не нужно развертывать в корне веб-сайта, в нашем приложении мы также развертываем в папке. Пути по-прежнему будут обрабатываться и нормально работать в подпапке, если у вас правильно установлен базовый href. - person AsGoodAsItGets; 01.08.2018
comment
К вашему сведению, base-href на данный момент не изменяет пути URL-адресов css. Значение /path останется без изменений, поэтому развертывание из подкаталога в настоящее время не будет работать, потому что нужно вручную добавить префикс css или удалить косую черту в начале, чтобы базовый href index.html вступил в силу. о_0 - person Samuel; 22.12.2020