我有以下项目结构:
gatsby-config.js
/src
/components
layout.jsx
/button
button.jsx
button.scss
/pages
/styles
styles.scss
_mixins.scss
_variables.scss
Run Code Online (Sandbox Code Playgroud)
和gatsby-config.js
和styles.scss
分别按以下方式配置:
...
plugins: [
...,
`gatsby-plugin-sass`
]
...
Run Code Online (Sandbox Code Playgroud)
@import 'variables',
'mixins';
Run Code Online (Sandbox Code Playgroud)
为了访问 mixins 和变量,styles.scss
当前正在所有组件的 scss 文件中导入,例如:
//button.scss
@import './../styles/styles.scss'
Run Code Online (Sandbox Code Playgroud)
这种方法是有效的,但问题是,随着项目的增长,styles.scss
它被多次导入,并且这种方法似乎有问题。是否可以styles.scss
只导入一次,并使所有的 mixin 和变量在所有组件中可用?
ksa*_*sav 18
您可以通过.sass将选项传递给 Sass gatsby-plugin-sass
。
以下选项将全局公开./src/styles/_styles.scss
项目中每个 Sass 文件的内容,而无需显式导入它。
module.exports = {
plugins: [
{
resolve: 'gatsby-plugin-sass',
options: {
data: `@import "${__dirname}/src/styles/styles";`,
}
},
],
}
Run Code Online (Sandbox Code Playgroud)
注意:这对某些人来说可能很明显,但对于未来的读者来说值得一提。
仅对仅包含变量、mixin、函数等的 Sass 文件执行此操作(在使用之前不会输出任何实际 CSS 的 Sass 功能)。否则你最终会得到在你的项目中重复多次的 CSS。
@use
gatsby-config.js
文件:
{\n resolve: `gatsby-plugin-sass`,\n options: {\n implementation: require("sass"),\n data: `@use "${__dirname}/src/global-styles/variables" as var;`\n }\n},\n
Run Code Online (Sandbox Code Playgroud)\nvar
将用作命名空间。
./src/global-styles/_variables.scss\n./src/components/main.jsx\n./src/components/main.module.scss\n
Run Code Online (Sandbox Code Playgroud)\n_variables.scss
有关,部分中下划线的信息。
_variables.scss
文件:
$color-1: red;\n$color-2: blue;\n
Run Code Online (Sandbox Code Playgroud)\nmain.jsx
文件:
import React from \'react\'\nimport style from \'./main.module.scss\'\n\nconst Main = () => (\n <div className={style.main}>Content</div>\n)\n\nexport default Main\n
Run Code Online (Sandbox Code Playgroud)\nmain.module.scss
文件:
.main {\n color: var.$color-1;\n}\n\n
Run Code Online (Sandbox Code Playgroud)\ngatsby-browser.js
好吧,您将需要@use
或遵循@import
中使用的其他答案gatsby-config.js
。混合@import
可能@use
不起作用,因为:
\n\n小心!
\nstylesheet\xe2\x80\x99s @use 规则必须位于除 @forward 之外的任何规则之前,包括样式规则。但是,您可以在@use规则之前声明变量以在配置模块时使用。
\n\n
我停止使用@import
,只使用@use
。
global-styles.scss
文件:
@use "./variables" as var;\n\nbody {\n color: var.$color-2;\n}\n
Run Code Online (Sandbox Code Playgroud)\ngatsby-browser.js
文件:
import \'./src/global-styles/global-styles.scss\'\n
Run Code Online (Sandbox Code Playgroud)\n
归档时间: |
|
查看次数: |
6217 次 |
最近记录: |