Sass更新到Angular v15后出现的错误

huangapple go评论73阅读模式
英文:

SassError after Update Angular to v15

问题

> 我正在将我的Angular从v14更新到v15。我已经执行了命令'ng update @angular/core@15 @angular/cli@15'和'ng update @angular/material@15'。

尝试启动应用程序时,我收到以下错误:

ERROR in ./src/app/shared/components/warning-dialog/warning-dialog.component.scss?ngResource
Module build failed (from ./node_modules/sass-loader/dist/cjs.js):
SassError: Only 0 arguments allowed, but 1 was passed.
  ┌──> src/styles/theme.scss
177│ @include mat.core($regular-font);
  │ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ invocation
  ╵
  ┌──> node_modules/@angular/material/core/_core.scss
8 │ @mixin core() {
  │        ━━━━━━ declaration
  ╵
  src/styles/theme.scss 177:1                                                 core()
  src/styles/theme.scss 177:1                                                 @import
  src/app/shared/components/warning-dialog/warning-dialog.component.scss 1:9  root stylesheet
 @ ./src/app/shared/components/warning-dialog/warning-dialog.component.ts 11:0-78 40:17-37
 @ ./src/app/shared/shared.module.ts 73:0-94 112:4-26
 @ ./src/app/app.module.ts 37:0-54 74:12-32
 @ ./src/main.ts 3:0-45 9:41-50

这是我的theme.scss


> 
> @use '~@angular/material' as mat;
> 
> $mat-theme-ignore-duplication-warnings: true;
> 
> $color-xxx-accent1-shade2: #ffea99; $color-xxx-accent5-shade2:
> #8ba68a; $color-xxx-accent6-shade1: #B21014; $color-xxx-basic3-shade2: #c2c2c2;
> 
> 
> 
> 
> 
> 
> /*  Color Theme */ $xxx-normal-palette: (   50 :  #FFFFFF, 
> // color-xxx-basic5   100 : #E9EBF1,  // color-xxx-highlight-shade3  
> 200 : #D2DAE3,  // color-xxx-highlight-shade2   300 : #BDC6D6,  //
> color-xxx-highlight-shade1   400 : #92A2BD,  // color-xxx-highlight  
> 500 : #6c7c97,  // color-xxx-form-button-main-dark   600 : #ACBCD7, 
> // color-xxx-form-button-main-light   700 : #7C89A1,  //
> color-xxx-form-button-shade1   800 : #526482,  //
> color-xxx-form-button-shade2   900 : #000000,  // color-xxx-form-text 
> A100 : #444444, // color-xxx-basic4   A200 : #666666, //
> color-xxx-basic3   A400 : #EEEFEA, // color-xxx-basic2   A700 :
> #AAA38E, // color-xxx-basic1   contrast: (
>       50 :  #000000,
>       100 : #000000,
>       200 : #000000,
>       300 : #000000,
>       400 : #000000,
>       500 : #000000,
>       600 : #000000,
>       700 : #000000,
>       800 : #000000,
>       900 : #000000,
>       A100 : #000000,
>       A200 : #000000,
>       A400 : #000000,
>       A700 : #000000,   ) );
> 
> $xxx-normal-palette-accent: (   50 :  #FFF5CC,  //
> color-xxx-accent1-shade3   100 : #FFEA99,  // color-xxx-accent1-shade2
> 200 : #FDDF66,  // color-xxx-accent1-shade1   300 : #FECB00,  //
> color-xxx-accent1   400 : #FF9100,  // color-xxx-form-border-accent  
> 500 : #ffad1f,  // color-xxx-signal3   600 : #E5E3DD,  //
> color-xxx-basic1-shade3   700 : #D4D1C6,  // color-xxx-basic1-shade2  
> 800 : #C3BEB0,  // color-xxx-basic1-shade1   900 : #F6F6F6,  //
> color-xxx-table-shade   A100 : #E0E0E0, // color-xxx-basic3-shade3  
> A200 : #C2C2C2, // color-xxx-basic3-shade2   A400 : #A3A3A3, //
> color-xxx-basic3-shade1   A700 : #666666, // color-xxx-basic3  
> contrast: (
>       50 :  #000000,
>       100 : #000000,
>       200 : #000000,
>       300 : #000000,
>       400 : #000000,
>       500 : #000000,
>       600 : #000000,
>       700 : #000000,
>       800 : #000000,
>       900 : #000000,
>       A100 : #000000,
>       A200 : #000000,
>       A400 : #000000,
>       A700 : #000000,   ) );
> 
> $xxx-normal-palette-warn: (   50 :  #ECEECC,  //
> color-xxx-accent3-shade3   100 : #DADE99,  // color-xxx-accent3-shade2
> 200 : #C7CE66,  // color-xxx-accent3-shade1   300 : #A2AD00,  //
> color-xxx-accent3   400 : #3db014,  // color-xxx-signal2   500 :
> #d20000,  // color-xxx-signal1   600 : #DADADA,  // color-xxx-accent2-shade3   700 : #B4B4B4,  // color-xxx-accent2-shade2
> 800 : #8

<details>
<summary>英文:</summary>

&gt; I&#39;m updating my Angular from v14 to v15. I already executed the commands &#39;ng update @angular/core@15 @angular/cli@15&#39; and &#39;ng update @angular/material@15&#39;.

When trying to start the application I get this Error:

ERROR in ./src/app/shared/components/warning-dialog/warning-dialog.component.scss?ngResource
Module build failed (from ./node_modules/sass-loader/dist/cjs.js):
SassError: Only 0 arguments allowed, but 1 was passed.
┌──> src/styles/theme.scss
177│ @include mat.core($regular-font);
│ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ invocation

┌──> node_modules/@angular/material/core/_core.scss
8 │ @mixin core() {
│ ━━━━━━ declaration

src/styles/theme.scss 177:1 core()
src/styles/theme.scss 177:1 @import
src/app/shared/components/warning-dialog/warning-dialog.component.scss 1:9 root stylesheet
@ ./src/app/shared/components/warning-dialog/warning-dialog.component.ts 11:0-78 40:17-37
@ ./src/app/shared/shared.module.ts 73:0-94 112:4-26
@ ./src/app/app.module.ts 37:0-54 74:12-32
@ ./src/main.ts 3:0-45 9:41-50


This is my theme.scss

>
> @use '~@angular/material' as mat;
>
> $mat-theme-ignore-duplication-warnings: true;
>
> $color-xxx-accent1-shade2: #ffea99; $color-xxx-accent5-shade2:
> #8ba68a; $color-xxx-accent6-shade1: #B21014; $color-xxx-basic3-shade2: #c2c2c2;
>
>
>
>
>
>
> /* Color Theme / $xxx-normal-palette: ( 50 : #FFFFFF,
> // color-xxx-basic5 100 : #E9EBF1, // color-xxx-highlight-shade3
> 200 : #D2DAE3, // color-xxx-highlight-shade2 300 : #BDC6D6, //
> color-xxx-highlight-shade1 400 : #92A2BD, // color-xxx-highlight
> 500 : #6c7c97, // color-xxx-form-button-main-dark 600 : #ACBCD7,
> // color-xxx-form-button-main-light 700 : #7C89A1, //
> color-xxx-form-button-shade1 800 : #526482, //
> color-xxx-form-button-shade2 900 : #000000, // color-xxx-form-text
> A100 : #444444, // color-xxx-basic4 A200 : #666666, //
> color-xxx-basic3 A400 : #EEEFEA, // color-xxx-basic2 A700 :
> #AAA38E, // color-xxx-basic1 contrast: (
> 50 : #000000,
> 100 : #000000,
> 200 : #000000,
> 300 : #000000,
> 400 : #000000,
> 500 : #000000,
> 600 : #000000,
> 700 : #000000,
> 800 : #000000,
> 900 : #000000,
> A100 : #000000,
> A200 : #000000,
> A400 : #000000,
> A700 : #000000, ) );
>
> $xxx-normal-palette-accent: ( 50 : #FFF5CC, //
> color-xxx-accent1-shade3 100 : #FFEA99, // color-xxx-accent1-shade2
> 200 : #FDDF66, // color-xxx-accent1-shade1 300 : #FECB00, //
> color-xxx-accent1 400 : #FF9100, // color-xxx-form-border-accent
> 500 : #ffad1f, // color-xxx-signal3 600 : #E5E3DD, //
> color-xxx-basic1-shade3 700 : #D4D1C6, // color-xxx-basic1-shade2
> 800 : #C3BEB0, // color-xxx-basic1-shade1 900 : #F6F6F6, //
> color-xxx-table-shade A100 : #E0E0E0, // color-xxx-basic3-shade3
> A200 : #C2C2C2, // color-xxx-basic3-shade2 A400 : #A3A3A3, //
> color-xxx-basic3-shade1 A700 : #666666, // color-xxx-basic3
> contrast: (
> 50 : #000000,
> 100 : #000000,
> 200 : #000000,
> 300 : #000000,
> 400 : #000000,
> 500 : #000000,
> 600 : #000000,
> 700 : #000000,
> 800 : #000000,
> 900 : #000000,
> A100 : #000000,
> A200 : #000000,
> A400 : #000000,
> A700 : #000000, ) );
>
> $xxx-normal-palette-warn: ( 50 : #ECEECC, //
> color-xxx-accent3-shade3 100 : #DADE99, // color-xxx-accent3-shade2
> 200 : #C7CE66, // color-xxx-accent3-shade1 300 : #A2AD00, //
> color-xxx-accent3 400 : #3db014, // color-xxx-signal2 500 :
> #d20000, // color-xxx-signal1 600 : #DADADA, // color-xxx-accent2-shade3 700 : #B4B4B4, // color-xxx-accent2-shade2
> 800 : #8F8F8F, // color-xxx-accent2-shade1 900 : #D26666, //
> color-xxx-accent2 A100 : #EFEFEF, // color-xxx-form-button A200 :
> #D9D9D9, // color-xxx-form-field A400 : #999999, // color-xxx-form-border A700 : #000000, // color-xxx-form-text
> contrast: (
> 50 : #000000,
> 100 : #000000,
> 200 : #000000,
> 300 : #000000,
> 400 : #000000,
> 500 : #000000,
> 600 : #000000,
> 700 : #000000,
> 800 : #000000,
> 900 : #000000,
> A100 : #000000,
> A200 : #000000,
> A400 : #000000,
> A700 : #000000, ) );
>
> $xxx-primary: mat.define-palette($xxx-normal-palette);
> $xxx-accent: mat.define-palette($xxx-normal-palette-accent);
> $xxx-warn: mat.define-palette($xxx-normal-palette-warn);
>
> $xxx-theme: mat.define-light-theme($xxx-primary,
> $xxx-accent, $xxx-warn);
>
> @include mat.all-component-themes($xxx-theme);
>
> /
xxx Typography / @font-face { font-family: "xxxGroup_Cond_Bold";
> src: url('assets/fonts/xxxGroup_Cond_Bold.ttf') format("truetype");
> font-style: normal; font-weight: normal; }
>
> @font-face { font-family: "xxxGroup_Cond_Regular"; src:
> url('assets/fonts/xxxGroup_Cond_Regular.ttf') format("truetype");
> font-style: normal; font-weight: bold; }
>
> $xxx-bold-font: mat.define-legacy-typography-config( $font-family:
> 'Group_Cond_Bold', $headline:
> mat.define-typography-level(18px, 32px, 700), $title:
> mat.define-typography-level(20px, 32px, 700) );
>
> $xxx-regular-font: mat.define-legacy-typography-config(
> $font-family: 'Group_Cond_Regular', $display-4:
> mat.define-typography-level(112px, 112px, 300), $display-3:
> mat.define-typography-level(56px, 56px, 400), $display-2:
> mat.define-typography-level(45px, 48px, 400), $display-1:
> mat.define-typography-level(34px, 40px, 400), $subheading-2:
> mat.define-typography-level(16px, 28px, 400), $subheading-1:
> mat.define-typography-level(16px, 24px, 400), $body-2:
> mat.define-typography-level(14px, 24px, 500), $body-1:
> mat.define-typography-level(14px, 20px, 400), $caption:
> mat.define-typography-level(12px, 20px, 400), $button:
> mat.define-typography-level(14px, 14px, 500), $input:
> mat.define-typography-level(inherit, 1.125, 400) );
>
> /
Font sizes / $font-size-large-18: 18px; $font-size-large-24:
> 24px; $font-size-normal-12: 12px; $font-size-normal-16: 16px;
> $font-size-small-10: 10px; $font-size-small-8: 8px;
>
> /
Font weights / $font-weight-bold: 700; $font-weight-normal:
> 400; $font-weight-thin: 300;
>
> @include mat.typography-hierarchy($xxx-regular-font);
>
> @include mat.all-component-typographies($xxx-regular-font);
>
> /
Be sure that you only ever include this mixin once! / @include
> mat.core($xxx-regular-font);
>
>
> /
Button colours */ .mat-button, .mat-button-toggle,
> .mat-raised-button { &.mat-raised-button:hover {
> background-color: mat.get-color-from-palette($xxx-accent, 700); } &.mat-primary:not(:hover) {
> background-color: mat.get-color-from-palette($xxx-primary, 400);
> color: mat.get-color-from-palette($xxx-primary, 50); } &.mat-primary:hover {
> background-color: mat.get-color-from-palette($xxx-primary, 500);
> color: mat.get-color-from-palette($xxx-primary, 50); } &.mat-primary[disabled] {
> background-color: mat.get-color-from-palette($bxxx-primary, 300);
> color: mat.get-color-from-palette($xxx-primary, 100); } }


I already deleted node_modules and package-lock and installed it again. But it didn&#39;t help.

I also deleted material and installed v14 again. With that there was no error. Then I updated it to v15, and there was the Error again. 

So is there a change in material that I have to adapt? But what, and how?

I would be so thankful for any help! I&#39;m searching so long for solution, but wasn&#39;t successful yet.





</details>


# 答案1
**得分**: 2

`define-typography-config` 在 V15 中由于迁移到 `@angular/material` 的 MDC 发生了变化。

之前的定义现在在 `define-legacy-typography-config` 下。

因此,你有两个选择:

* 使用 `define-legacy-typography-config`
* 迁移到新的 `define-typography-config`,其定义如下:

```scss
@function define-legacy-typography-config(
  $font-family:   'Roboto, "Helvetica Neue", sans-serif',
  $display-4:     define-typography-level(112px, 112px, 300, $letter-spacing: -0.05em),
  $display-3:     define-typography-level(56px, 56px, 400, $letter-spacing: -0.02em),
  $display-2:     define-typography-level(45px, 48px, 400, $letter-spacing: -0.005em),
  $display-1:     define-typography-level(34px, 40px, 400),
  $headline:      define-typography-level(24px, 32px, 400),
  $title:         define-typography-level(20px, 32px, 500),
  $subheading-2:  define-typography-level(16px, 28px, 400),
  $subheading-1:  define-typography-level(15px, 24px, 400),
  $body-2:        define-typography-level(14px, 24px, 500),
  $body-1:        define-typography-level(14px, 20px, 400),
  $caption:       define-typography-level(12px, 20px, 400),
  $button:        define-typography-level(14px, 14px, 500),
  // 行高必须是字体大小的无单位分数。
  $input:         define-typography-level(inherit, 1.125, 400)
);

编辑:

你应该直接将排版传递给主题:

$theme: (
    color: (
        primary: $primary,
        accent: $accent,
        warn: $warn,
    ),
    typography: $xxx-regular-font,
    density: 0,
);

mat.define-light-theme($theme);
英文:

The definition of define-typography-config has changed in V15 with the migration to MDC for @angular/material.

The previous one is now under define-legacy-typography-config.

So you have 2 choices :

  • You use define-legacy-typography-config
  • You move to the new define-typography-config which is defined like following :
@function define-legacy-typography-config(
  $font-family:   &#39;Roboto, &quot;Helvetica Neue&quot;, sans-serif&#39;,
  $display-4:     define-typography-level(112px, 112px, 300, $letter-spacing: -0.05em),
  $display-3:     define-typography-level(56px, 56px, 400, $letter-spacing: -0.02em),
  $display-2:     define-typography-level(45px, 48px, 400, $letter-spacing: -0.005em),
  $display-1:     define-typography-level(34px, 40px, 400),
  $headline:      define-typography-level(24px, 32px, 400),
  $title:         define-typography-level(20px, 32px, 500),
  $subheading-2:  define-typography-level(16px, 28px, 400),
  $subheading-1:  define-typography-level(15px, 24px, 400),
  $body-2:        define-typography-level(14px, 24px, 500),
  $body-1:        define-typography-level(14px, 20px, 400),
  $caption:       define-typography-level(12px, 20px, 400),
  $button:        define-typography-level(14px, 14px, 500),
  // Line-height must be unit-less fraction of the font-size.
  $input:         define-typography-level(inherit, 1.125, 400)

Edit:

You should pass the typography to the theme directly :

$theme: (
    color: (
        primary: $primary,
        accent: $accent,
        warn: $warn,
    ),
    typography: $xxx-regular-font,
    density: 0,
);

mat.define-light-theme($theme),

答案2

得分: 0

我知道了!

将你的 mat.define-typography-config 更改为 mat.define-legacy-typography-config

$regular-font: mat.define-legacy-typography-config(
  $font-family:       'Group_Cond_Bold',
  $headline:          mat.define-typography-level(18px, 32px, 700),
  $title:             mat.define-typography-level(20px, 32px, 700)
);

并且将 @include mat.core($regular-font) 更改为 @include mat.typography--hierarchy($regular-font)

@include mat.typography-hierarchy($regular-font);

谢谢提醒!

英文:

I got it!

Change your mat.define-typography-config to mat.define-legacy-typography-config

$regular-font: mat.define-legacy-typography-config(
  $font-family:       &#39;Group_Cond_Bold&#39;,
  $headline:          mat.define-typography-level(18px, 32px, 700),
  $title:             mat.define-typography-level(20px, 32px, 700)
);

And the @include mat.core($regular-font) to @include mat.typography--hierarchy($regular-font)

@include mat.typography-hierarchy($regular-font);

Thanks for the hints!

huangapple
  • 本文由 发表于 2023年3月8日 16:05:03
  • 转载请务必保留本文链接:https://go.coder-hub.com/75670584.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定