Gatsby 在使用带有 '@use 'sass:color' 的 Sass 文件后失败

Hen*_*nry 6 sass gatsby

我正在使用gatsby-plugin-sass.

我的gatsby-config.js文件:

module.exports = {
  plugins: [
    'gatsby-plugin-resolve-src',
    'gatsby-plugin-sass',
    'gatsby-plugin-react-helmet',
    {
      resolve: `gatsby-source-filesystem`,
      options: {
        name: `images`,
        path: `${__dirname}/src/assets/images`,
      },
    },
  ],
}

Run Code Online (Sandbox Code Playgroud)

我有以下样式文件结构

|
|src
|-styles
|--base
|--- _variables.scss
|--components
|--- _Buttons.scss
|--- ...
|--main.scss
Run Code Online (Sandbox Code Playgroud)

我的_Buttons.scss文件是这样导入的

@import '../base/variables';
@use 'sass:color as *;
Run Code Online (Sandbox Code Playgroud)

当我尝试使用这样的sass 颜色函数时(如https://sass-lang.com/documentation/modules所指定)

%buttons-focus {
  background-color: color.adjust($primary-color, $alpha: -0.5);
}
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

Invalid CSS after "...nd-color: color": expected expression (e.g. 1px, bold), was ".adjust($primary-co"
Run Code Online (Sandbox Code Playgroud)

在我的 main.scss 我导入这样的样式:

@import './components/Buttons';

Run Code Online (Sandbox Code Playgroud)

我在监督什么吗?我试着改变了@use@import,没有运气。对我来说, gatsby-sass-plugin 似乎不知道 sass 模块。

ksa*_*sav 10

gatsby-plugin-sassnode-sass在引擎盖下使用。但是为了使用@use 支持内置模块,您需要配置gatsby-plugin-sass为使用dart-sass。见下文。

内置模块 - sass-lang

目前只有 Dart Sass 支持使用 @use 加载内置模块。其他实现的用户必须使用它们的全局名称来调用函数。

替代 Sass 实现 - gatsby-plugin-sass

默认情况下使用 Sass (node-sass) 的节点实现。要使用用 Dart (dart-sass) 编写的实现,您可以安装 sass 而不是 node-sass 并将其作为实现传递到选项中:

npm install --save-dev sass
Run Code Online (Sandbox Code Playgroud)
gatsby-config.js
plugins: [
  {
    resolve: `gatsby-plugin-sass`,
    options: {
      implementation: require("sass"),
    },
  },
]
Run Code Online (Sandbox Code Playgroud)

  • 同样 - 我花了一些时间才发现这个,所以我填写了添加一些文档/错误的请求,以帮助识别问题:https://github.com/sass/node-sass/issues/2991 (2认同)