#angular
#angular
Вопрос:
Я обновил свой проект angular с 9 до 10. Однако у меня проблема с внешним scss, который я использую в angular.json, т.Е.
Чтобы воспроизвести ее, я попытался сделать это в совершенно новом проекте, и, похоже, у меня такая же проблема:
-
ng новый angular10
-
npm устанавливает roboto-fontface
-
добавить в angular.json
«build»: { «builder»: «@angular-devkit/build-angular:browser», «options»: { «styles»: [ «node_modules/roboto-fontface/css/roboto/sass/roboto-fontface.scss», «src/styles.scss» ], … }, }
-
новая сборка
Я получаю следующую ошибку:
ERROR in ./node_modules/roboto-fontface/css/roboto/sass/roboto-fontface.scss (./node_modules/css-loader/dist/cjs.js??ref--13-1!./node_modules/postcss-loader/src??embedded!./node_modules/resolve-url-loader??ref--13-3!./node_modules/s
ass-loader/dist/cjs.js??ref--13-4!./node_modules/roboto-fontface/css/roboto/sass/roboto-fontface.scss)
Module Error (from ./node_modules/postcss-loader/src/index.js):
(Emitted value instead of an instance of Error) CssSyntaxError: C:UsersP70363MyProjectsmixins.scss:17:8: Can't resolve '../../../../../fonts/roboto/Roboto-Black.woff' in 'C:UsersP70363MyProjectsdeletemeangular10node_module
sroboto-fontfacecssrobotosass'
15 | @font-face {
16 | font-family: '#{$variant}-#{$type}';
> 17 | src: url('#{$font-full-path}-#{$type}.woff2') format('woff2'),
| ^
18 | url('#{$font-full-path}-#{$type}.woff') format('woff');
19 | }
В качестве обходного пути я сделал следующее:
"build": {
"builder": "@angular-devkit/build-angular:browser",
"options": {
"styles": [
"src/add-roboto.scss",
"src/styles.scss"
],
...
},
}
где roboto.scss находится:
$roboto-font-path: '../fonts' !default;
@import 'node_modules/roboto-fontface/css/roboto/sass/roboto-fontface.scss';
что хорошо работает. Идея пришла, когда я зашел в mixins.scss в node_modules/roboto-fontface /css/mixins.scss, и я увидел, что $roboto-font-path: ‘../../../шрифты’ !по умолчанию;
Однако я не могу понять, почему это работает в angular<10, но не angular> = 10
Спасибо
Комментарии:
1. Привет, я думаю, что ваш пакет не обновлен для angular 10. Вам лучше загрузить и поместить свои шрифты в папку assets, как предложено в одном из ответов. Вот ваша проблема GitHub
2. Я думаю, для этого нужно больше голосов. Я только что обновился с 9 до 11 и столкнулся с точно такой же проблемой. Интересно, есть ли правильный способ справиться с этим.
3. У меня такая же проблема, я обновляю свой node.js версия до 15 и angular до 11 с 9. это будет решено, надеюсь, это может вам помочь.
Ответ №1:
Другой способ перезаписать значение по умолчанию ‘$roboto-font-path’ — это использование «@use ‘…’ with (..)» — см. Веб-сайт sass о переменных.
При переходе с angular 9 на angular 10 я обновил все scss @imports в моем текущем приложении до «нового» синтаксиса, используя @use (как ИМХО, именно так рекомендует sass на данный момент).
Итак, мой импорт roboto теперь выглядит так:
@use 'roboto-fontface/css/roboto/sass/roboto-fontface' with (
$roboto-font-path: '~roboto-fontface/fonts'
);