【发布时间】:2018-02-19 12:17:12
【问题描述】:
我正在尝试切换 <link /> 的 href 以用于主题化,并且 SCSS 主题位于我的 monorepo 的包文件夹中,这些文件夹在 node_modules 中符号链接。我需要能够编译和引用这些。
我遇到了以下固定问题:angular/angular-cli#3401 并一直在尝试实现类似的东西:
"styles": [
"styles.scss",
{
"input": "../node_modules/@org/themes/dark.scss",
"output": "dark",
"lazy": true
}
],
我的理解(可能不正确)是这会将dark.scss 文件编译为dist/dark.bundle.css,并且我可以通过http://localhost:4200/dist/dark.bundle.css 加载它,但它没有按预期工作。我是误解了什么还是完全错误地这样做了?
如何从node_modules 编译一个 SCSS 文件,然后我可以在应用程序中延迟加载?我可以尝试另一种/更好的方法吗?
补充说明:
- 使用 Angular 版本
4.2.4 - 使用 Angular CLI 版本
1.3.0 - documentation for this approach
- 我在 monorepo 工作,所以
node_modules/@org/themes是一个符号链接 - 我已尝试使用
ng serve --preserve-symlinks选项以防出现上述问题。没有区别
我研究了Angular Material docs website approaches this problem 的方式,似乎他们有一个自定义构建脚本,可以在提供应用程序之前将 SCSS 文件编译为 assets 目录中的 CSS 文件。我认为上面的固定问题消除了对这一步的需要,但也许不是。这是唯一的方法吗?
已解决
感谢@Kuncevic。我错过了--extract-css 标志。
工作配置:
"styles": [
"styles.scss",
{
"input": "../node_modules/@org/themes/src/dark.scss",
"output": "themes/dark",
"lazy": true
}
],
使用以下服务脚本,我可以通过http://localhost:4200/themes/dark.bundle.css 访问它:
ng serve --extract-css --preserve-symlinks
【问题讨论】:
-
我错过了添加 Angular 自动附加的“.bundle.css”扩展名
-
您的解决方案对我帮助很大...我不知道“懒惰”标志。
-
“lazy”关键字在最新版本中已替换为“inject”。
标签: angular sass angular-cli