sass - 在全局范围内将sass包含在gatsby中

标签 sass gatsby

我有以下项目结构:

gatsby-config.js
/src
  /components
    layout.jsx
    /button
      button.jsx
      button.scss
  /pages
  /styles
    styles.scss
    _mixins.scss
    _variables.scss

gatsby-config.jsstyles.scss分别通过以下方式配置:
...
plugins: [
...,
`gatsby-plugin-sass`
]
...
@import 'variables',
        'mixins';

为了访问mixin和变量,目前正在所有组件的scss文件中导入styles.scss,例如:
//button.scss
@import './../styles/styles.scss'


这种方法有效,但是问题是,随着项目的发展,styles.scss被多次导入,并且这种方法似乎出了问题。
是否可以只导入styles.scss一次,并使所有mixin和变量在所有组件中都可用?

最佳答案

您可以通过gatsby-plugin-sassoptions传递给Sass。
以下选项可将./src/styles/_styles.scss的内容全局公开给项目中的每个Sass文件,而无需显式导入。

module.exports = {
  plugins: [
    {
      resolve: 'gatsby-plugin-sass',
      options: {
        data: `@import "${__dirname}/src/styles/styles";`,
      }
    },
  ],
}

注意:这对某些人可能是显而易见的,但值得将来的读者引用。
仅对仅包含变量,mixin,函数等的Sass文件执行此操作(除非使用了Sass功能,否则它们不会输出任何实际的CSS)。否则,您将获得在整个项目中重复多次的CSS。
Example repo

关于sass - 在全局范围内将sass包含在gatsby中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57833884/

相关文章:

node.js - node-sass-middleware 未编译

node.js - 为什么我的 AWS 实例无法安装 node-sass 包?

javascript - 使用material-ui中的mixins来自定义React中的组件

Github pages 上的 Gatsby deploy 缺少文件,但在本地看起来不错

javascript - Gatsby React 查询 GraphQL

Gatsby 构建错误 "document is not defined"仅在 Netlify 上

css - Gulp-sass 无法编译

css - 如何区分 mat-select 样式和 mat-paginator mat-select 样式?

gatsby - 我可以将 gatsby-plugin-image 用于动态图像路径吗?

graphql - 使用 Gatsby 在 Markdown 帖子中为特色图像使用绝对路径