在整个React应用程序中只有一个基本SCSS @use导入?

dsf9zpds  于 2023-06-25  发布在  React
关注(0)|答案(1)|浏览(207)

我的问题很简单。我喜欢在React中使用SCSS,但我避免了变量/mixin等。因为对我来说,在重建一些东西后修复所有的导入简直是噩梦(我有一个scss文件分别为每个组件)。
我发现我可以很容易地在React导入中创建绝对路径,例如:
import "src/scss/variables"
现在我再次非常兴奋地学习SCSS可以提供的所有好东西。
所以我的问题是,如果我可以创建一个global.scss文件,并在整个应用程序中只使用这个文件,将样式导入到不同的SCSS文件。例如global.scss看起来像这样:

  1. @use "variables"
  2. @use "mixins"
  3. @use "functions"
  4. @forward "variables"
  5. @forward "mixins"
  6. @forward "functions"

components.scss中,我只需要导入:

  1. @use "src/scss/global"
  2. .test {
  3. background-color: global.$primary-color;
  4. }

另一个问题是是否有可能全局变量只是导入到main.jsxprapp.jsx中,而不是自动在所有文件中使用?

hsvhsicv

hsvhsicv1#

实际上,所有变量、mixin和函数都有一个文件是可能的。你分享的例子几乎是正确的,但你只需要使用@forward,而不是@use

  1. @forward "variables";
  2. @forward "mixins";
  3. @forward "functions";

确保这三份文件是不完整的。
.jsx中导入这个global.scss文件是无用的,因为它不包含任何样式。但是,您可以做的是配置您的bundler将其自动导入到所有.scss文件中。
例如,如果你使用webpacksass-loader,你可以使用选项additionalData

  1. options: {
  2. additionalData: "@use \"src/scss/global\";"
  3. }

如果你得到一个关于@import loop的错误,你需要排除全局样式文件,这样它们就不会自动导入:

  1. options: {
  2. additionalData: (content, loaderContext) => {
  3. const { resourcePath, rootContext } = loaderContext;
  4. // Assuming your global files are in this folder
  5. const styleGlobalPathRegex = /^src\\scss\\.*/;
  6. const relativeFilePath = path.relative(rootContext, resourcePath);
  7. const isAGlobalStyleFile = relativeFilePath.match(styleGlobalPathRegex);
  8. return isAGlobalStyleFile ? content : "@use \"src/scss/global\";" + content;
  9. };
  10. }

如果使用Vite,可以使用css.preprocessorOptions添加:

  1. css: {
  2. preprocessorOptions: {
  3. scss: {
  4. additionalData: ...
  5. }
  6. }
  7. }
展开查看全部

相关问题