【问题标题】:Why is angular cli not including my component scss?为什么 Angular cli 不包括我的组件 scss?
【发布时间】:2017-05-19 03:54:34
【问题描述】:

我正在使用:

  • Angular v2.3.1
  • Angular CLI v1.0.0-beta.24
  • 节点 v6.9.2
  • Node-sass v4.1.1

我有一个新的 Angular CLI 项目,它不加载组件样式,尽管它们显示在 main.bundle.js 文件中并且没有抛出路径错误(不再)。

angular-cli.json 文件有 defaults.styleExt: "scss"apps.styles: ["styles.scss","path/to/bootstrap.css"]defaults.inline for style 和 template 都是假的。

正在加载全局和引导样式,但未从组件加载任何样式。

目录结构

|- src
  |- index.html
  |- styles.scss
  |- scss
    |- _colors.scss
    |- _modals.scss
    |- _overrides.scss
    |- _utils.scss
  |- app
    |- components
      |- app-header
        |- app-header.component.ts
        |- app-header.component.html
        |- app-header.component.scss
    |- pages
    |- app-routing.module.ts
    |- app.component.ts
    |- app.module.ts

styles.scss

@import './scss/_colors';
@import './scss/_overrides';
@import './scss/_utils';
@import './scss/_modals';

html, body {
  width: 100%;
  height: 100%;
  font-family: 'Roboto', 'Helvetica', sans-serif;
}

app-root {
  display: table;
  width: 100%;
  height: 100%;
}

app-header.component.ts

import {Component} from '@angular/core';

@Component({
  selector: 'app-header',
  templateUrl: './app-header.component.html',
  styleUrls: ['./app-header.component.scss']
})
export class AppHeaderComponent {}

app-header.component.scss

@import '../../../../scss/_colors';

:host {
  display: table-row;
  height: 1px;
  background: #FFF;
}

.header-stripe {
  width: 100%;
  height: 3px;
  background: $AMARANTH;
}

.header-content {
  padding: 5px 20px;
  width: 100%;
  position: relative;
  border-bottom: solid 1px $ALTO;
}

index.html

<!doctype html>
<html>
  <head>
    <base href="./">
    <title>Test CLI App</title>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:100,300,400" />
  </head>
  <body>
    <app-root>Loading...</app-root>
  </body>
</html>

一些上下文...

我使用 Angular2 Heroes 教程开始了这个项目。我无法让测试和其他事情“正常工作”。在我的研究过程中,我决定尝试使用 Angular CLI,因为它应该包括一个正常运行的测试平台,并希望有其他一些好处。

最初,我的模板和样式路径有很多 JS 错误,经过一些diggingdigging,我能够摆脱这些错误。我的 webpack 构建现在应该是“有效的”。

在我的angular-cli.json 文件中,我将defaults.styleExt 更新为scss,并且我能够通过将我的styles.scss 文件添加到apps.styles 来包含全局样式。我的核心布局样式和 Bootstrap 样式现在正在应用到应用程序中。

我的问题是,由于某种原因,我的组件样式没有被加载。正如我所说,它们在我运行ng build 后出现在main.bundle.js 中,并且我已经确认它们在我运行ng serve 时在chrome 中加载的main.bundle.js 中(不确定如果这些文件相同,因为我可以运行ng serve 而无需先运行ng build)。看起来好像 node-sass 正在正确解析变量。

没用的东西:

  • 在 angular-cli.json 中,app.styles: ["app/**/*.scss"]。它说在重建时无法解析路径。

  • 在组件文件中,styleUrls: [require('./app-header.component.scss')]。引发控制台错误“未捕获的错误:找不到模块”。在 webpackMissingModule (main.bundle.js:1152) []"

  • 在组件文件中,import componentStyles from './app-header.component.scss',然后是styles: [componentStyles]。抛出“找不到模块'./app-header.component.scss'。”建设时

我很惊讶这如此复杂,我一定错过了一些愚蠢的东西。

【问题讨论】:

    标签: javascript sass angular-cli


    【解决方案1】:

    聚会迟到了,但遇到了同样的事情。对于遇到此线程的人来说,将其作为另一种选择。

    一切都在渲染,样式如上面提到的那样编写,但实际上什么都没有显示。

    Shadow DOM Strategies 找到这篇文章解决了我的问题。

    专门设置encapsulation: ViewEncapsulation.None 使样式正确显示给给定组件。

    import { Component, OnInit, ViewEncapsulation } from '@angular/core';

    【讨论】:

    • 谢谢,参考解释帮助我解决了 ViewEncapsulation!
    【解决方案2】:

    似乎在我的情况下,唯一的解决方法是实际使用 Angular CLI 来生成我所有的组件、服务和管道,并基本上以这种方式重建所有内容。

    我首先生成了一个新项目,然后更新了我的 angular-cli.json 文件以使用 SCSS。从那里,我手动执行ng g &lt;whatever&gt; 来重建所有内容(大约 20 个组件和 3 个服务)。我现在正在一个一个地复制和粘贴所有自定义方法和有趣的东西,并在每个步骤之后验证一切是否正常。

    这有点让人头疼,因为新文件似乎在其他方面都是相同的,但是当我刚刚从非 CLI 生成的应用程序中放入组件和东西时,我的应用程序的 CLI 版本并不满意。也许是目录结构?也许我只是推平了一些东西?我不知道。

    我希望将来有人能够说明为什么会发生这种情况。

    【讨论】:

      【解决方案3】:

      在将我的 Angular 应用程序从 7 更新到 8 后,我遇到了同样的行为。几个小时后,我确实找到了原因:我正在使用 BrowserModule.withServerTransition({appId: APP_ID}) 和我的 APP_ID 的结构类似于 xx.xxx.xxxxx。从 APP_ID 中删除所有点后,它再次按预期工作。

      【讨论】:

        【解决方案4】:

        您是否尝试将"app/**/*.scss" 添加到apps.styles

        我在我的 gruntfile 中使用类似的东西将所有较少的文件合并为一个

        【讨论】:

        • 我做到了。它说它无法解决该路径。我正在尝试生成一个新应用程序并慢慢迁移到使用 scss 以查看我可能出错的地方。从非 CLI 应用程序迁移模块/组件时可能会出现问题。
        • 你的组件加载了吗?没有样式但已加载?
        • 是的,组件已加载,从技术上讲,样式也已加载(我可以在开发工具中浏览“源”时看到它们),但它们没有被应用。
        猜你喜欢
        • 2020-07-25
        • 2017-12-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-01-04
        • 1970-01-01
        • 2014-05-27
        • 1970-01-01
        相关资源
        最近更新 更多