【问题标题】:Angular 2 - Duplicated <style> blocks everywhereAngular 2 - 到处都是重复的 <style> 块
【发布时间】:2017-11-09 02:15:39
【问题描述】:

我正在使用最新的 Angular(4) 和 Angular CLI。我遵循了关于 SO 的建议来设置组件可用的全局 scss。

Angular-CLI global scss vairables

我的结构是这样的

/
 styles.scss
 /styles
  variables.scss
  mixins.scss
  common.scss
 /app
  /component1
   component1.scss
  /component2
   component2.scss

主要的styles.scss文件有如下代码

@import './styles/variables.scss';
@import './styles/mixins.scss';
@import './styles/common.scss';

在我的组件中,我以

的语句开始每个组件的 scss 文件
@import '~styles.scss';

我认为这是将全局变量/mixins/common 引入组件的 scss 的正确方法。然而,当我开始在组件中包含组件时,我开始注意到 Webpack 实际上是在页面中为每个组件创建一个块,并且每个组件都将所有全局 scss 都写在其中。因此,组件 1 将有一个块,顶部有所有变量、mixins、常见的东西,然后在页面中的另一个组件 2 的正下方有另一个块,再次包含所有这些信息。

除了效率极低之外,这意味着全局样式在每次加载时都会覆盖自己(可以在 chrome 调试中看到)一次。

非常感谢一些方向。

【问题讨论】:

  • 您可以禁用viewEncapsulation 以使用全局样式
  • 究竟是什么意思?我不必在我的组件样式中 @import 主要的 styles.scss 吗?我已经尝试过了,但 webpack 无法编译,因为它说它不知道组件 scss 文件中的某些 scss 变量是什么。
  • 刚刚发现这似乎是一个已经在讨论的问题。 github.com/angular/angular-cli/issues/1261 但如果有人有聪明的解决方案,那将不胜感激。
  • 如果您阅读了最后一条评论,您可以找到答案。

标签: css angular webpack angular-cli


【解决方案1】:

这是基本的 sass 行为,你不应该多次导入导致 css 的东西(导入到组件中的 sass 文件通常应该只包含变量、mixin 和函数)。如果您只需要导入一次,请将其添加到默认样式文件中。 Look here

【讨论】:

    【解决方案2】:

    &lt;style&gt; 标签是正常的角度行为。每个组件 SCSS 都被写入一个 &lt;style&gt; 元素,所以这没有什么问题。 style.scss 用于不需要封装的全局样式。如果您在 angular.json 中导入它,它也会被写入 &lt;style&gt; 元素:

    "styles": [
        "styles.css"
    ],
    

    您遇到的错误是您链接的question(仍然不被接受)。 您不应该将已经导入的 styles.scss(除了变量或 mixins)导入到组件中,因为这会导致包大小增加,因为您一遍又一遍地导入代码(这也是 GitHub issue 的原因你提到的)。

    您可以使用 mixins、变量和 common.scss,只需将它们直接包含在您的组件 SCSS 中,就像您需要它们一样。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-11
      • 2016-08-01
      • 2018-02-16
      • 2017-09-06
      • 1970-01-01
      • 2017-02-22
      相关资源
      最近更新 更多