我正在尝试出于主题目的而切换A的href
设置<link />
,而SCSS主题位于我的monorepo的packages文件夹中,该文件夹以符号链接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
- 此方法的文档
- 我在monorepo工作,所以
node_modules/@org/themes
是符号链接 - 我尝试使用
ng serve --preserve-symlinks
选项,以防上述问题。没关系
我研究了Angular Material docs网站解决此问题的方式,似乎他们有一个自定义生成脚本,该脚本在将SCSS文件编译为目录中的CSS文件assets
之前,会为应用程序提供服务。我认为上述已解决的问题消除了对此步骤的需要,但也许没有。这是唯一的方法吗?
解决了
感谢@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
通过设置
"lazy": true
意味着它不会出现,index.html
但是没有机制可以为您延迟加载该捆绑包,请检查以下注释:我同意
"lazy": true
起初有点令人困惑。如果运行,
ng build
您实际上可以查看生成的内容,并分析cli生成的所有文件。当您这样做时:
您应该可以直接在http:// localhost:4200 / dark.bundle.js上访问文件,但是在
index.html
您设置时它不会出现"lazy": true
js
在dev模式下将cli生成样式捆绑在一起的原因是因为这种方式要快得多。当您进行prod build时,Budng buld --prod
会.css
默认输出到。