首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

无法使用Webpack + React访问Storybook中的全局SCSS变量

Webpack是一个用于打包JavaScript模块的工具,而React是一个用于构建用户界面的JavaScript库。Storybook是一个用于开发和测试React组件的工具。在使用Webpack和React开发应用程序时,我们可以使用SCSS(Sassy CSS)来定义全局的样式变量。

然而,要在Storybook中访问全局的SCSS变量并不容易,因为Storybook将每个组件视为独立的实体,它们的样式和变量并不是全局可用的。在这种情况下,我们可以通过以下几种方法来解决这个问题:

  1. 使用webpack的resolve.alias配置来指定全局SCSS文件的路径,然后在各个组件中导入全局SCSS文件。这样,每个组件都可以访问全局的SCSS变量。例如,在webpack配置文件中添加以下内容:
代码语言:txt
复制
resolve: {
  alias: {
    '@globalStyles': path.resolve(__dirname, 'path/to/globalStyles.scss')
  }
}

然后,在每个需要使用全局SCSS变量的组件中导入全局SCSS文件:

代码语言:txt
复制
import '@globalStyles';
  1. 在Storybook的webpack配置文件中使用sass-loader来加载全局SCSS文件。首先,在.storybook文件夹中创建一个webpack.config.js文件,并添加以下内容:
代码语言:txt
复制
const path = require('path');

module.exports = async ({ config }) => {
  config.module.rules.push({
    test: /\.scss$/,
    use: [
      'style-loader',
      'css-loader',
      'sass-loader',
      {
        loader: 'sass-resources-loader',
        options: {
          resources: path.resolve(__dirname, '../path/to/globalStyles.scss')
        },
      },
    ],
    include: path.resolve(__dirname, '../'),
  });

  return config;
};

然后,将全局SCSS文件的路径添加到sass-resources-loader的options中。这样,所有的组件都可以访问全局的SCSS变量。

  1. 在每个需要使用全局SCSS变量的组件中,使用React的context来传递全局的SCSS变量。首先,创建一个包含全局SCSS变量的context:
代码语言:txt
复制
import React from 'react';

const GlobalStylesContext = React.createContext({});

export const GlobalStylesProvider = ({ children, globalStyles }) => {
  return (
    <GlobalStylesContext.Provider value={globalStyles}>
      {children}
    </GlobalStylesContext.Provider>
  );
};

export const useGlobalStyles = () => {
  return React.useContext(GlobalStylesContext);
};

然后,在根组件中使用GlobalStylesProvider来传递全局的SCSS变量:

代码语言:txt
复制
import React from 'react';
import { GlobalStylesProvider } from './globalStylesContext';
import globalStyles from 'path/to/globalStyles.scss';

const App = () => {
  return (
    <GlobalStylesProvider globalStyles={globalStyles}>
      {/* 应用程序的其他组件 */}
    </GlobalStylesProvider>
  );
};

最后,在需要使用全局SCSS变量的组件中使用useGlobalStyles来获取全局的SCSS变量:

代码语言:txt
复制
import React from 'react';
import { useGlobalStyles } from './globalStylesContext';

const MyComponent = () => {
  const globalStyles = useGlobalStyles();

  // 使用全局SCSS变量
  return (
    <div style={{ color: globalStyles.color }}>
      {/* 组件的内容 */}
    </div>
  );
};

这些方法可以帮助我们在Webpack + React项目中访问Storybook中的全局SCSS变量。在腾讯云的产品中,可使用COS(对象存储)来存储和管理前端项目的静态资源文件。详情请参考腾讯云COS产品介绍:腾讯云COS产品介绍

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

React 构建可复用设计系统

React 让 web 开发简化了很多。原则上 React 基于组件模式让代码分解和复用变得更加容易。 然而,开发者并不总是清楚如何跨项目分享他们组件。在这片文章,我会展示几种可用方法。...所有的视觉组件和相应样式单独保存在 design_system 目录下。任何全局样式和变量保存在 src/styles。 ?...variables.scss 定义了全局变量,比如:颜色和网格设置。由于我们使用了 4px-8px 网格,我们将用 4px 做为基础值。 父组件是 Page,它控制着页面的文档流。...这是因为我们构建所有组件都是一个封闭系统。 它只会使用需要 props,并且无视其他。在当前示例,text 组件忽略了 onClick 事件。幸运是,这很容易被修复。...使用这种方法,然后把参数传递给组件。 分享组件 随着团队扩大,很难把有效组件同步给每个人。Storybooks 是一种很好分享组件方法。让我们配置一个基础 storybook

3.2K30
  • React 构建可复用设计系统

    React 让 web 开发简化了很多。原则上 React 基于组件模式让代码分解和复用变得更加容易。 然而,开发者并不总是清楚如何跨项目分享他们组件。在这片文章,我会展示几种可用方法。...所有的视觉组件和相应样式单独保存在 design_system 目录下。任何全局样式和变量保存在 src/styles。 ?...variables.scss 定义了全局变量,比如:颜色和网格设置。由于我们使用了 4px-8px 网格,我们将用 4px 做为基础值。 父组件是 Page,它控制着页面的文档流。...这是因为我们构建所有组件都是一个封闭系统。 它只会使用需要 props,并且无视其他。在当前示例,text 组件忽略了 onClick 事件。幸运是,这很容易被修复。...使用这种方法,然后把参数传递给组件。 分享组件 随着团队扩大,很难把有效组件同步给每个人。Storybooks 是一种很好分享组件方法。让我们配置一个基础 storybook

    1.4K20

    从零开始,手摸手搭建前端组件库

    Storybook运行不依赖于项目,开发人员不用担心由于开发环境、依赖问题导致不能开发控件。Storybook支持很多主流框架(React、Vue、Angular)。...改进了整个生态系统视图层,插件和集成安装使用安装参考指南storybook for vue 自定义webpack配置,解决扩展名问题和less编译问题 // 自定义webpack配置 const path...storybook文件夹 addons.js 注册相关插件 config.js 配置允许环境,安装全局插件。...当时以为vue-loader15 是要搭配webpack4 一起使用 所以降低了一下storybook版本低版本storybook 默认使用babel6 只能解析.babelrc 且需要自定义...webpack配置 所以只能使用storybook中提供自定义babel和webpack配置 基础设置都配置好了,在引入插件时候 发现插件不能用..........

    2.8K30

    手摸手教你用 Storybook 改善组件库开发

    更快更强构建 UI 组件 Storybook 是一个为开发独立 React、Vue 和 Angular UI 组件开源工具。...高效有序地构建炫酷用户界面 以上是官网开宗明义介绍,总之在 React 等领域,Storybook 已经很好证明了自己,引入这个工具以后,即便是在普通项目中,也能帮助开发者逐渐打理出各种低耦合可复用组件.../stories/ 修改 .storybook/config.js 相应配置,直接把 .stories.js 文件和对应组件源码放在一起: const req = require.context(...同样在以上文件,做一些和项目中 main.js 相似的初始化工作: // .storybook/webpack.config.js import 'normalize.css'; import Vue...为了正确解析 Vue 单文件组件样式部分,修改设置: // .storybook/webpack.config.js const path = require('path'); module.exports

    1.9K10

    ExtJS全局变量保存和使用

    前阵子研究ExtJS,对于如何在Sencha Architect软件中使用全局变量伤透了脑筋。...现在我一共发现了两种: 第一种:使用“window.全局变量”形式 window 对象总是存在,你可理解其为一个浏览器窗口对象。它包含了其它所有的对象如document 和所有的全局变量。...假设有全局变量seq,那么赋值和取值操作如下: window.seq=13; //赋值 var temp=window.seq; //取值 第二种:使用document对象cookie属性 在客户端...JavaScript ,Window 对象是全局对象,所有的表达式都在当前环境中计算。...也就是说,要引用当前窗口根本不需要特殊语法,可以把那个窗口属性作为全局变量使用

    2.4K20

    服务端来自火星,客户端来自金星,RSC 开发新思路

    注意: 这个解决方案目前还不能在其他 Storybook React 框架(例如 react-vite、react-webpack5)中使用,因为它们没有像 Next.js 那样使用 canary 版...然而,Node 代码在浏览器无法执行,这就导致了问题! 为了解决这个问题,我们建议搭建一个干净数据访问层。这也是 RSC 架构师推荐最佳实践。...创建好数据访问层后,你就可以在浏览器通过模拟来运行它,并精确控制返回数据,展示不同用户界面状态(加载、错误、成功等)。...你可以使用模块模拟或网络模拟来模拟数据访问层,这两种方式 Storybook 都支持。...当然,也可以使用 webpack/vite 别名实现一个简单但功能有限解决方案。我们计划在 Storybook 未来版本中提供更便捷模块模拟功能。

    18810

    3w字长文带你【从0开发一个自己前端组件库】 | 技术创作特训营第五期

    init 2.改造项目 将storybook初始化项目结构改造成这样结构 改造前: 改造后: 样式 使用scss来编写样式代码 样式结构我们采用如下结构: _variables.scss:各种变量以及可配置设置..._mixins.scss全局mixins _functions.scss全局 functions style.scss:组件单独样式 以Button组件为例子: -styles - _variables.scss...- _mixins.scss - _functions.scss -components - Button - style.scss 因为我们使用是create-react-app创建项目...,所以我们做组件库也需要设置色彩系统样式,因为我们使用scss,所以我们可以将这些系统样式颜色通过变量来定义,方便复用。...mixin编写上面的函数 新建 src/styles/_mixin.scss,编写如下代码: 这里解释一下:相当于在button-size传了4个参数,使用这4个参数来定义样式属性,使用时候即可传入对应样式变量即可

    86851

    CSS Modules使用详解

    CSS Modules CSS 模块化 不管是用jquery还是react开发,都会遇到一系列 CSS 问题: 全局污染 命名混乱 依赖引入复杂 无法共享变量 代码冗余 通过 JS 来管理 CSS...发布时依旧编译出单独 JS 和 CSS。它并不依赖于 React,只要你使用 Webpack,可以在 Vue/Angular/jQuery 中使用。...CSS Modules 使用 局部变量全局变量 :local: 做 localIdentName 规则处理 :global: 样式编译后不变 如果书写时不加,默认处理为:local。... CSS和JS变量共享 :export 关键字可以把 CSS 变量输出到 JS : /* index.scss */ $primary-color: #f40; :export {...使用 Webpack 可以让全局样式和 CSS Modules 局部样式和谐共存。 module: { loaders: [{ test: /\.jsx?

    1.6K50

    在PHP如何使用全局变量方法详解

    有很多方法能够使这些数据成为全局数据,其中最常用就是使用“global”关键字申明,稍后在文章我们会具体讲解到。...在开发过程,你可能会知道知道每一个全局变量,但大概一年之后,你可能会忘记其中至少一般全局变量,这个时候你会为自己使用那么多全局变量而懊悔不已。 那么如果我们不使用全局变量,我们该使用什么呢?...请求封装器 虽然我们注册器已经使“global”关键字完全多余了,在我们代码还是存在一种类型全局变量:超级全局变量,比如变量$_POST,$_GET。...虽然这些变量都非常标准,而且在你使用也不会出什么问题,但是在某些情况下,你可能同样需要使用注册器来封装它们。 一个简单解决方法就是写一个类来提供获取这些变量接口。...> 正如你看到,现在我们不再依靠任何全局变量了,而且我们完全让这些函数远离了全局变量。 结论 在本文中,我们演示了如何从根本上移除代码全局变量,而相应用合适函数和变量来替代。

    7.3K100

    CSS Modules使用详解

    CSS Modules CSS 模块化 不管是用jquery还是react开发,都会遇到一系列 CSS 问题: 全局污染 命名混乱 依赖引入复杂 无法共享变量 代码冗余 通过 JS 来管理 CSS...发布时依旧编译出单独 JS 和 CSS。它并不依赖于 React,只要你使用 Webpack,可以在 Vue/Angular/jQuery 中使用。...CSS Modules 使用 局部变量全局变量 :local: 做 localIdentName 规则处理 :global: 样式编译后不变 如果书写时不加,默认处理为:local。... CSS和JS变量共享 :export 关键字可以把 CSS 变量输出到 JS : /* index.scss */ $primary-color: #f40; :export {...使用 Webpack 可以让全局样式和 CSS Modules 局部样式和谐共存。 module: { loaders: [{ test: /\.jsx?

    1.8K10

    webpack 4 30 个步骤打造优化到极致 react 开发环境

    reactwebpack4 进行结合,集 webpack 优势于一身,从 0 开始构建一个强大 react 开发环境。...polyfill 并写入 ES6 语法 ,但是这样有一个缺点: 全局引入 @babel/polyfill 这种方式可能会导入代码不需要 polyfill,从而使打包体积更大 更改 .babelrc...使用静态资源路径 publicPath (CDN) CDN 通过将资源部署到世界各地,使得用户可以就近访问资源,加快访问速度。...要接入 CDN,需要把网页静态资源上传到 CDN 服务上,在访问这些资源时,使用 CDN 服务提供URL。...mode:productioin 6、暴露全局变量 可以直接在全局使用 $ 变量 new webpack.ProvidePlugin({ $: 'jquery', jQuery

    2.3K21

    css模块化及CSS Modules使用详解

    发布时依旧编译出单独 JS 和 CSS。它并不依赖于 React,只要你使用 Webpack,可以在 Vue/Angular/jQuery 中使用。是我认为目前最好 CSS 模块化解决方案。...Facebook 工程师 Vjeux 首先抛出了 React 开发遇到一系列 CSS 相关问题。加上我个人看法,总结如下: 全局污染 CSS 使用全局选择器机制来设置样式,优点是方便重写样式。...无法共享变量 复杂组件要使用 JS 和 CSS 来共同处理样式,就会造成有些变量在 JS 和 CSS 冗余,Sass/PostCSS/CSS 等都不提供跨 JS 和 CSS 共享变量这种能力。... 关键字可以把 CSS 变量输出到 JS 。...如何与全局样式共存 前端项目不可避免会引入 normalize.css 或其它一类全局 css 文件。使用 Webpack 可以让全局样式和 CSS Modules 局部样式和谐共存。

    6.8K100

    React + webpack 开发单页面应用简明中文文档教程(十)在 jsx 和 scss使用图片

    + webpack 开发单页面应用简明中文文档教程(十)在 jsx 和 scss使用图片 React 入门系列教程导航 React + webpack 开发单页面应用简明中文文档教程(一)一些基础概念...+ webpack 开发单页面应用简明中文文档教程(十)在 jsx 和 scss使用图片 React + webpack 开发单页面应用简明中文文档教程(十一)将项目打包到子目录运行 ----...这种写法对于我这种具有代码强迫症的人来说,简直是无法忍受。因此,我主导项目开发,都强制要求将所有的图片存放在 /public/image/ 文件夹。...好,我们现在已经可以在浏览器访问到我们想要效果了。 scss使用图片 我们在 @/style/style.scss 文件,我们是怎么写呢?...我暂时没有想到如何在 scss 自动处理这部分方法。只能每次打包时候,手工修改一下了。 不过和批量修改所有的图片地址相比,修改一个变量,还是要简单很多

    1.2K30

    从 Styleguidist 迁移到 Storybook

    随着开发人员不断创建新 React 组件,我们 React 代码库一直在增长,但我们现有的 React Styleguidist(本文简称 Styleguidist)开发环境无法并行扩展。...它拥有强大社区支持和丰富插件生态系统,可用于易访问性测试、跨浏览器测试和其他用途。 在 Storybook ,用户可以通过 Story 来逐个浏览和开发组件示例。...为了保持现有 React 组件示例并减少开发人员在迁移过程负担,我们列出了以下这些需求: 我们现有的 Styleguidist 文件使用了 ES5 风格导入和语法。...我们希望新 Storybook 语法与组件源代码保持一致,所以将使用 ES6。 应该让使用过 Styleguidist 开发人员对 Storybook 文档也感到熟悉。...使用现有的 webpack 配置也意味着组件外观和行为与实际页面完全一样。

    1.4K20

    盘点React开发不可或缺工具

    React Dev Tools 在开发原生js时候,我们经常使用浏览器自带开发者工具,它足以帮助我们查看和调试js变量各种信息,但是对于react框架来说,因为它是采用动态渲染生成代码结构,...因此,我们需要一种可以分析react代码结构和变量状态工具,而react dev tools 就是这样工具,通过安装这个浏览器扩展,我们就可以轻松地分析react框架各个变量状态信息,还可以分析react...useHooks Hooks是 React 新增功能,可让我们在不编写类情况下使用状态和其他 React 功能。...对于钩子如何使用很多人还不是很理解,不过这没关系,有人已经总结了很多关于钩子使用方式,并且提供了详细案例帮助我们理解,你只需要访问usehooks这个网站就可以查看并使用它们。...它与支持热模块替换 (HMR) 和 Babel 插件 Webpack 和其他打包器一起使用。通过使用它,可以让你开发效率得到大大提升。

    1.7K20
    领券