Sass math.div 函数在 angular 应用程序中未定义,但在 angular lib 中定义

Ild*_*dar 5 sass angular

我需要在我的角度应用程序中使用Sass math.div函数。这是我的 SCSS 代码示例:

@use "sass:math";

div {
  min-height: math.div(100, 2);
}

Run Code Online (Sandbox Code Playgroud)

我使用ng new my-application命令创建了角度应用程序。我还使用ng generate library my-lib命令在应用程序中创建了一个库。

SCSS 代码math.div在库中工作正常。如果我将 SCSS 代码放入projects/my-lib/src/lib/my-lib.component.scss并运行,ng build my-lib那么该库将成功构建。

但是,例如src/app/app.component.scss,如果我将 SCSS 代码放在 src 文件夹中并运行命令,ng build则会出现此错误:

Error: Module build failed (from ./node_modules/sass-loader/dist/cjs.js):
SassError: Undefined function.
  ?
4 ?   min-height: math.div(100, 2);
  ?                 ^^^^^^^^^^^^^^^^
  ?
  src\app\app.component.scss 4:17  root stylesheet
Run Code Online (Sandbox Code Playgroud)

math.div函数自 1.33.0 起在 sass 中可用,所以我认为问题在于 angular 应用程序由于某种原因与 angular lib 具有不同的 sass 版本。但我不知道如何修复它。

例如min-height: math.pow(10, 2);在应用程序中工作正常。math.pow 从 1.25.0 开始可用

Bek*_*dze 22

在您的 package-lock.json文件中,您有两个与 sass 相关的组件: sass本身和sass-loader. 它看起来像这样,代表已经安装的软件包:

 "sass": {
  "version": "1.22.2",
  "resolved": "https://registry.npmjs.org/sass/-/sass-1.22.2.tgz",
},
"sass-loader": {
  "version": "7.1.0",
  "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-7.1.0.tgz"
}
Run Code Online (Sandbox Code Playgroud)

您可以提高版本并在(控制要安装的软件包)中sass添加值并 在保存后重新运行吗?^1.33.0package.jsondependenciessass-loader12.0.0npm install

  • package-lock.json 中有 sass 1.27.0 和 sass-loader 10.0.5。我在 package.json 依赖项中添加了 "sass": "^1.33.0", "sass-loader": "12.0.0" 并运行了 npm install 但没有帮助。仍然收到错误未定义的函数。 (4认同)
  • 是的,有帮助。如果我手动更改 package-lock.json 并运行 npm install ,则不会出现错误“未定义的函数”。我收到另一个错误:“错误:模块构建失败(来自 ./node_modules/@angular-devkit/build-angular/node_modules/sass-loader/dist/cjs.js):TypeError:this.getOptions 不是函数”。看起来 @angular-devkit\build-angular 确实需要这个旧的 sass 版本 (2认同)