Импортирование бутстрапа меньше для расширения класса создает 404 на глификонных шрифтах

В моем приложении Angular 2 я переключился с raw css на меньшее, чтобы написать:

.main-button {
  .btn;
  .btn-primary;
  padding: 1em;
}

вместо того, чтобы группировать имена классов во всем html. Чтобы это работало, мне нужно:

  • в angular-cli.json, измените:

    "defaults": { "styleExt": "css", "prefixInterfaces": false }

    to "styleExt": "less",

  • Переименуйте мой foo.component.css в foo.component.less и обновите foo.component.ts соответственно.

  • В компоненте less, чтобы иметь возможность ссылаться на классы начальной загрузки, мне пришлось: @import "~bootstrap/less/bootstrap";

Это отлично работает, за исключением того, что теперь я получаю 404 ошибки в консоли браузера:

jquery-1.12.3.min.js:2 GET http://localhost:4200/node_modules/bootstrap/fonts/bootstrap/glyphicons-halflings-regular.woff2 (anonymous function) @ jquery-1.12.3.min.js:2i @ jquery-1.12.3.min.js:2fireWith @ jquery-1.12.3.min.js:2ready @ jquery-1.12.3.min.js:2K @ jquery-1.12.3.min.js:2
foobar:1 GET http://localhost:4200/node_modules/bootstrap/fonts/bootstrap/glyphicons-halflings-regular.woff 
foobar:1 GET http://localhost:4200/node_modules/bootstrap/fonts/bootstrap/glyphicons-halflings-regular.ttf 

Я пробовал несколько вариантов на @icon-font-path без успеха. Я проверил запросы на шрифты на вкладке сети и посмотрел http://localhost:4200/448c34a56d699c29117adc64c43affeb.woff2.

Я также пытался использовать sass/scss. Для этого требуется дополнительный модуль bootstrap-sass с аналогичной директивой include, но результат будет точно таким же.

Каков правильный способ сделать это без 404 ошибок?

Это обслуживается ng serve, там все по умолчанию.

Ответ 1

У меня была такая же проблема с sass:

$icon-font-path: "~bootstrap-sass/assets/fonts/bootstrap/";
@import "~bootstrap-sass/assets/stylesheets/bootstrap";

https://github.com/igorzg/angular2-zero-to-hero/blob/master/ui/src/styles.scss

Итак, для меньшего количества должно быть в ваших styles.less:

$icon-font-path: "~bootstrap/fonts/";
@import "~bootstrap/less/bootstrap";

Ответ 2

Angular -CLI свяжет ваш шрифт следующим образом: 448c34a56d699c29117adc64c43affeb.woff2. Если вы хотите сырые файлы, возможно, вам придется публиковать их на своем сервере...

Ответ 3

Попробуйте: ng set defaults.styleExt scss

Angular -cli должен соответствовать глобальным и локальным версиям

Запустить ng init проверить изменения во всех автоматически сгенерированных файлах

Наконец ng build

Чтобы все синхронизировать, попробуйте:

git clone https://github.com/angular/angular-cli.git
cd angular-cli
npm link

Для шрифтов и активов прямо сейчас angular -cli принимает путь на основе исходных файлов:

"assets": [ "assets", "favicon.ico" ]