Невозможно собрать библиотеку Angular с миксином SASS из узловых модулей - PullRequest
2 голосов
/ 07 мая 2020

Настройка: Angular 9 рабочее пространство с библиотеками, тестовым приложением и сборником рассказов с использованием CDK _overlay.scss в файле .scss с @use.

.storybook/
node_modules/
projects/
- library/
  - src/
    - lib/
      - component/
        component.scss // `@use`s `_overlay.scss`
  ng-package.json
- test-app/
angular.json

Проблема: При использовании наложения sass mixin @use "~@angular/cdk/overlay" тестовое приложение и сборник рассказов компилируются, но ng-packagr не может найти _overlay.scss.

ERROR: Can't find stylesheet to import.
  ╷
2 │ @use "~@angular/cdk/overlay";
  │ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  ╵
  projects\library\src\lib\component\component.scss 2:1  root stylesheet
An unhandled exception occurred: Can't find stylesheet to import.

Обходные пути:

  • Можно добавить node_modules/ к массиву "styleIncludePaths": "["../../node_modules"]" ng-package.json и импортировать миксин наложения, например @use "@angular/cdk/overlay", но тогда он не работает с тестовым приложением или сборником рассказов; кроме того, среда IDE не может определить путь.
  • @use "overlay", "styleIncludePaths": ["../../node_modules/@angular/cdk"] и "stylePreprocessorOptions": {"includePaths": ["node_modules/@angular/cdk"]} работают для тестового приложения и сборки библиотеки, но не для сборника рассказов; кроме того, IDE не может разрешить путь. Возможно, сборник рассказов можно настроить для работы с этой настройкой.
  • Изменение пути на @use "../../../../../node_modules/@angular/cdk/overlay" работает во время разработки, но не удастся в производстве, когда кто-то попытается добавить библиотеку в свои node_modules и @use миксин.
  • Копирование _overlay.scss в библиотеку будет работать, но его нужно будет обновлять при каждом изменении cdk.
  • Предоставление настраиваемого webpack.config, возможно, сработает, но его нужно будет обновить, если angular скрытые изменения.

Q: Разве импорт с тильдой ~ не должен работать, если "styleIncludePaths": ["../../node_modules/"] установлен в ng-package.json? Это проблема с ng-packagr?

...