Проблема компиляции scss в angular lib, созданном с помощью angular-cli

Создал (ng build my-lib) угловую библиотеку с глобальным scss, затем собрал в один файл и скопировал в папку библиотеки.

dist-lib/my-lib/lib/sass/my-lib.scss

Теперь my-lib.scss импортирует некоторые ресурсы, например

@font-face {
    font-family:"Roboto Regular";
    font-weight:normal;
    font-style:normal;
    src: url("../resources/fonts/roboto-regular/Roboto-Regular.eot?") format("eot"),  /* IE9 Compat Modes */
         url("../resources/fonts/roboto-regular/Roboto-Regular.woff") format("woff"), /* Pretty Modern Browsers */
         url("../resources/fonts/roboto-regular/Roboto-Regular.ttf") format("truetype");  /* Safari, Android, iOS */
}

Я скопировал папку ресурсов в свою библиотеку по адресу

dist-lib/my-lib/lib/resources
                             /fonts
                                   / roboto-regular/Roboto-Regular.eot

Теперь в файле styles.scss моего приложения я импортирую файл my-lib.scss, подобный этому

@import "../dist-lib/my-lib/lib/sass/my-lib";

Но это показывает ошибку

ERROR in ./src/styles.scss (./node_modules/@angular-devkit/build-angular/src/angular-cli-files/plugins/raw-css-loader.js!./node_modules/postcss-loader/src??embedded!./node_modules/sass-loader/lib/loader.js??ref--14-3!./src/styles.scss)
Module Error (from ./node_modules/postcss-loader/src/index.js):
(Emitted value instead of an instance of Error) CssSyntaxError: D:\SK\Study\Angular\AngularLib\MyLib\dist-lib\my-lib\lib\sass\my-lib.scss:10:9: 
Can't resolve '../resources/fonts/roboto-regular/Roboto-Regular.woff' in 'D:\SK\Study\Angular\AngularLib\MyLib\src'

   8 |     font-style:normal;
   9 |     src: url("../resources/fonts/roboto-regular/Roboto-Regular.eot?") format("eot"),  /* IE9 Compat Modes */
> 10 |          url("../resources/fonts/roboto-regular/Roboto-Regular.woff") format("woff"), /* Pretty Modern Browsers */
     |         ^
  11 |          url("../resources/fonts/roboto-regular/Roboto-Regular.ttf") format("truetype"); 

Я предполагаю, что ресурсы разрешаются относительно файла src / styles.scss, а не относительно dist-lib / my-lib / lib / sass / my-lib.scss

Какое решение для этого?


person Sunil Garg    schedule 02.01.2019    source источник


Ответы (1)


Поскольку я создаю / обслуживаю свой проект через Angular-Cli, плагины / загрузчики, которые он использует для работы с scss, не решали проблемы относительных (по отношению к самой библиотеке) URL-адресов (url(../)).

Чтобы решить эту проблему, я создал fonts.css, а не fonts.scss, который я поставляю с библиотекой. Конечный пользователь также должен импортировать этот fonts.css.

И сейчас это работает, хотя это не кажется хорошим решением, у меня до сих пор есть обходной путь.

Обновление: предоставление font.scss

@font-face {
    font-family: 'Proxima Nova';
    src: url('../assets/fonts/proxima-nova-light/ProximaNova-Light.eot');
    src: url('../assets/fonts/proxima-nova-light/ProximaNova-Light.eot?#iefix') format('embedded-opentype'),
        url('../assets/fonts/proxima-nova-light/ProximaNova-Light.woff2') format('woff2'),
        url('../assets/fonts/proxima-nova-light/ProximaNova-Light.woff') format('woff'),
        url('../assets/fonts/proxima-nova-light/ProximaNova-Light.ttf') format('truetype'),
        url('../assets/fonts/proxima-nova-light/ProximaNova-Light.svg#ProximaNova-Light') format('svg');
    font-weight: 300;
  }

  @font-face {
    font-family: 'Proxima Nova';
    src: url('../assets/fonts/proxima-nova-regular/ProximaNova-Regular.eot');
    src: url('../assets/fonts/proxima-nova-regular/ProximaNova-Regular.eot?#iefix') format('embedded-opentype'),
        url('../assets/fonts/proxima-nova-regular/ProximaNova-Regular.woff2') format('woff2'),
        url('../assets/fonts/proxima-nova-regular/ProximaNova-Regular.woff') format('woff'),
        url('../assets/fonts/proxima-nova-regular/ProximaNova-Regular.ttf') format('truetype'),
        url('../assets/fonts/proxima-nova-regular/ProximaNova-Regular.svg#ProximaNova-Regular') format('svg');
    font-weight: 400;
  }

  @font-face {
    font-family: 'Proxima Nova';
    src: url('../assets/fonts/proxima-nova-medium/ProximaNova-Medium.eot');
    src: url('../assets/fonts/proxima-nova-medium/ProximaNova-Medium.eot?#iefix') format('embedded-opentype'),
    url('../assets/fonts/proxima-nova-medium/ProximaNova-Medium.woff2') format('woff2'),
    url('../assets/fonts/proxima-nova-medium/ProximaNova-Medium.woff') format('woff'),
    url('../assets/fonts/proxima-nova-medium/ProximaNova-Medium.ttf') format('truetype'),
        url('../assets/fonts/proxima-nova-medium/ProximaNova-Medium.svg#ProximaNova-Medium') format('svg');
        font-weight: 500;
  }

  @font-face {
    font-family: 'Proxima Nova';
    src: url('../assets/fonts/proxima-nova-bold/ProximaNova-Bold.eot');
    src: url('../assets/fonts/proxima-nova-bold/ProximaNova-Bold.eot?#iefix') format('embedded-opentype'),
        url('../assets/fonts/proxima-nova-bold/ProximaNova-Bold.woff2') format('woff2'),
        url('../assets/fonts/proxima-nova-bold/ProximaNova-Bold.woff') format('woff'),
        url('../assets/fonts/proxima-nova-bold/ProximaNova-Bold.ttf') format('truetype'),
        url('../assets/fonts/proxima-nova-bold/ProximaNova-Bold.svg#ProximaNova-Bold') format('svg');
    font-weight: 700;
  }

Поскольку я использовал font.scss, который будет скомпилирован в файл font.css в качестве процесса сборки библиотеки с использованием этого скрипта

"build-lib-fonts": "node-sass --include-path scss ./projects/project/src/lib/styles/_fonts.scss ./dist-lib/project/styles/fonts.css",
person Sunil Garg    schedule 10.01.2019
comment
Не могли бы вы поделиться содержимым вашего файла font.css? У меня та же проблема, но я не понимаю, как ее исправить. Спасибо - person mindparse; 23.04.2019