Angular CLI的延迟加载应用程序主题样式

我正在尝试出于主题目的而切换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

Jim十三2020/03/24 18:13:34

通过设置"lazy": true意味着它不会出现,index.html但是没有机制可以为您延迟加载该捆绑包,请检查以下注释

lazy选项实际上并不延迟加载任何内容。它只是阻止它在应用程序启动时执行。

我同意"lazy": true起初有点令人困惑。

如果运行,ng build您实际上可以查看生成的内容,并分析cli生成的所有文件。

当您这样做时:

{
    "input": "../node_modules/@org/themes/dark.scss",
    "output": "dark",
    "lazy": true
}

您应该可以直接在http:// localhost:4200 / dark.bundle.js上访问文件,但是在index.html您设置时它不会出现"lazy": true

如果要获取dark.bundle.css捆绑包而不是 dark.bundle.js在开发人员模式下,可以使用--extract-cssflag。

js在dev模式下将cli生成样式捆绑在一起的原因是因为这种方式要快得多。当您进行prod build时,Bud ng buld --prod.css默认输出到

伽罗2020/03/24 18:13:34

由于我无法评论已接受的答案,因此,我将作为一个单独的注释对其进行重要说明。请移至此处,并在需要时从此处删除。因此,可接受的答案基于单独的CSS文件。由于角6,你不能使用既不--extract-css-ec在标志package.jsonng serve,也不是extractCss: trueangular.jsonserve配置部分。不过,您可以使用这种方法来使其工作。然后,您可以使用带有promise的方法来加载懒惰的样式APP_INITIALIZER