如何在不使用“~”的情况下从 sass 加载器中的 node_modules 导入样式表

2024-04-14

我正在设置 Storybook 实例以从 Rails 应用程序加载样式,但它无法在我的应用程序中加载导入main.scss文件,两者都是样式表node_modules:

@import 'react-table/react-table.css';
@import 'animate.css';

当我尝试运行故事书实例时收到错误:

ERROR in ./app/javascript/stylesheets/main.scss (./node_modules/css-loader/dist/cjs.js!./node_modules/sass-loader/dist/cjs.js??ref--9-2!./app/javascript/stylesheets/main.scss)
Module not found: Error: Can't resolve './animate.css' in '<my_project>/app/javascript/stylesheets'
 @ ./app/javascript/stylesheets/main.scss (./node_modules/css-loader/dist/cjs.js!./node_modules/sass-loader/dist/cjs.js??ref--9-2!./app/javascript/stylesheets/main.scss) 4:40-111
 @ ./app/javascript/stylesheets/main.scss
 @ ./stories/1-Table.stories.js
 @ ./stories sync ^\.\/(?:(?:(?!\.)(?:(?:(?!(?:|\/)\.).)*?)\/)?(?!\.)(?=.)[^\/]*?\.stories\.js\/?)$
 @ ./.storybook/generated-entry.js
 @ multi ./node_modules/@storybook/core/dist/server/common/polyfills.js ./node_modules/@storybook/core/dist/server/preview/globals.js ./.storybook/generated-entry.js (webpack)-hot-middleware/client.js?reload=true&quiet=true

ERROR in ./app/javascript/stylesheets/main.scss (./node_modules/css-loader/dist/cjs.js!./node_modules/sass-loader/dist/cjs.js??ref--9-2!./app/javascript/stylesheets/main.scss)
Module not found: Error: Can't resolve './react-table/react-table.css' in '<my_project>/app/javascript/stylesheets'
 @ ./app/javascript/stylesheets/main.scss (./node_modules/css-loader/dist/cjs.js!./node_modules/sass-loader/dist/cjs.js??ref--9-2!./app/javascript/stylesheets/main.scss) 3:40-127
 @ ./app/javascript/stylesheets/main.scss
 @ ./stories/1-Table.stories.js
 @ ./stories sync ^\.\/(?:(?:(?!\.)(?:(?:(?!(?:|\/)\.).)*?)\/)?(?!\.)(?=.)[^\/]*?\.stories\.js\/?)$
 @ ./.storybook/generated-entry.js
 @ multi ./node_modules/@storybook/core/dist/server/common/polyfills.js ./node_modules/@storybook/core/dist/server/preview/globals.js ./.storybook/generated-entry.js (webpack)-hot-middleware/client.js?reload=true&quiet=true

这是我的工作项目的部分目录:

.
├── .storybook
│   ├── main.js
│   └── preview-head.html
├── app
│   ├── assets
│   │   └── stylesheets
│   │       ├── _base.scss
│   └── javascript
│       ├── packs
│       │   ├── application.js
│       │   └── server_rendering.js
│       └── stylesheets
│           ├── _variables.scss
│           └── main.scss
├── babel.config.js
├── postcss.config.js
├── stories
│   ├── 0-Welcome.stories.js
│   └── 1-Table.stories.js
├── yarn-error.log
└── yarn.lock

这是我在故事书中的尝试main.js to let sass-loader我知道我想导入文件而不添加“~”符号,因为 Web 应用程序端不会正确加载样式,因此无法更改项目的 webpack 配置。

const path = require('path')

module.exports = {
  stories: ['../stories/**/*.stories.js'],
  addons: ['@storybook/addon-actions', '@storybook/addon-links'],
  webpackFinal: async config => {
    config.module.rules.push({
      test: /\.scss$/,
      use: [
        'style-loader',
        'css-loader',
        {
          loader: 'sass-loader',
          options: {
            includePaths: [
              '../node_modules/animate',
              '../node_modules/react-table'
            ]
          }
        }
      ],
      include: [
        path.resolve(__dirname, '../node_modules'),
        path.resolve(__dirname, '../app/javascript/stylesheets'),
        path.resolve(__dirname, '../app/assets/stylesheets')
      ]
    })
    return config
  }
}

我做错了吗?


如果您使用的是 Webpack 4.x,那么您只需在 Webpack 配置文件中添加几个别名,如下所示:

// Your Webpack config file
...

webpackFinal: async config => {
  config.module.resolve.alias = {
    'animate-css': path.resolve(__dirname, '../../../node_modules/animate.css'),
    'react-table': path.resolve(__dirname, '../../../node_modules/react-table-v6/react-table.css'),
  }

  ...
}

然后您可以将这些别名导入到您的主文件:

@import 'animate-css';
@import 'react-table';

您还需要删除options来自你的 sass-loader。我指定了路径节点模块假设它与你处于同一水平app目录,还有包react-table不包含 CSS 文件,所以我指定了 v6。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在不使用“~”的情况下从 sass 加载器中的 node_modules 导入样式表 的相关文章

随机推荐

  • Selenium IDE - 导出测试脚本

    我正在尝试导出在 Selenium IDE 中创建的测试自动化 但找不到导出选项 我有一些测试场景 其中测试是相同的 但我需要复制现有测试并交换一些 ID 才能使其正常工作 我只能将其保存为 side 文件 而不能保存为 Selenium
  • glutTimerFunc问题

    I use Glut制作一个简单的动画 在主函数中 glutTimerFunc TIMERMSECS animate 0 叫做 这两段代码生成相同的图形 const int TIMERMSECS 20 float animation tim
  • 删除android进度条中的进度条背景

    如何去掉灰色背景 只在进度条中显示蓝色进度条 我已经回答过一个有类似要求的问题 Result 要删除它 简单地通过 id 搜索背景并尝试隐藏它是行不通的 要删除背景 我必须创建与系统版本相同的绘图并删除背景项目 TL DR 创建文件prog
  • 如何确保 Data.Vector 的摊销 O(n) 级联?

    我有一个应用程序 在其中使用向量作为代码的一部分是有效的 然而 在计算过程中我需要跟踪一些元素 我听说你可以从 Data Vectors 获得 O n 摊销串联 通过通常的数组增长技巧 但我认为我做得不对 假设我们有以下设置 import
  • 循环遍历节点列表 JS

    我的问题是 我正在尝试通过 Hot 类的 NODELIST 我想将他们的 className 更改为 cool 当我使用 for 循环时 它的第二个 li 似乎没有改变颜色 有谁知道我在这里犯了什么错误 第二个 li 元素没有改变颜色 谢谢
  • 如何更改 NSPopover 背景颜色包括三角形部分?

    我该如何改变NSPopover背景颜色包括三角形部分吗 它实际上要简单得多 并且您不需要私有 API 使视图控制器的根视图成为自定义类 implementation MyPopoverRootView void viewDidMoveToW
  • 在 Python 中为方法生成控制流图的最简单方法是什么?

    我正在编写一个程序来尝试比较两种方法 我想为所有匹配的方法生成控制流图 CFG 并使用拓扑排序来比较两个图 有一个Python包叫做staticfg https pypi org project staticfg 它正是从一段 Python
  • 为什么不再需要指明ByVal/ByRef?

    我刚刚安装了 Visual Studio 2010 Service Pack 在 Windows Update 上建议 我可以看到 intellisense 上的一个新功能 这意味着当我编写Function or Sub在 VB NET 中
  • Linux 上的 JDK 1.8 缺少 JNI 包含文件

    我正在尝试编译以下项目 https github com entropia libsocket can java 我总是收到此错误消息 有谁知道如何修复它 这可能是 Linux x64 Debian Wheezy 上 JDK 1 8 0 1
  • 自定义类型.NamedTuple

    我在用着NamedTuples来保存数据 我想添加一个可以被多个继承的方法NamedTuple基础课程 但是当我尝试使用多重继承或子类化时NamedTuple基于类 它不起作用 具体来说 我试图自动为所有数据类提供一个方法 该方法可以查看类
  • 同一服务器实例和同一作业存储上的多个 Quartz 实例

    我们有 2 个使用quartz 进行调度的应用程序 我们应用程序的quartz properties如下 org quartz scheduler instanceName sr22QuartzScheduler org quartz sc
  • HighCharts:在一个系列中绘制多个段?

    我问自己是否可以做多条重叠的线 在一个系列中 我找不到任何例子 我不想要这个 Highcharts Highstock 阶梯线没有垂直 过渡 线 https stackoverflow com questions 23242857 high
  • 私有子方法的原型

    我的代码如下所示 var baseClass function CODE var subClass function MORE CODE 向baseClass添加方法就可以了 我只是使用 baseClass prototype newMet
  • 如何从 XML 文档读取值来构建 ComboBox?

    我正在尝试阅读xml questions tagged xml我想为我妈妈制作的文件 所以基本上这就是我想做的 A ComboBox这将显示 XML 中的所有蔬菜名称 选择一种蔬菜后 第二个ComboBox将在 XML 中显示可以使用第一个
  • 如何使用用户环境在 NodeJS 中执行?

    我正在尝试在 Node 中执行命令 cd www foo path to git bin git exe config list global 基本上 我想执行一个返回全局配置 针对当前用户 的 Git 命令 当我直接在 cli 上执行命令
  • 如何在Spritekit中创建计时器?

    我已经弄清楚如何在单视图应用程序中制作计时器 但没有弄清楚 Spritekit 当我使用以下代码时 出现 2 个错误 如下所示 谁能帮我解决这个问题吗 谢谢 杰克 计时器 if scorelabel scorelabel SKLabelNo
  • Session_End 上的 asp.net 会话变量

    我需要访问 global asax cs 中 Session End 事件上的会话变量 但 HttpContext Current 为空 因此所有会话变量都不可访问 a 我可以以不同的方式访问用户会话 或者 b 在 Session End
  • 为什么以 utf-8 保存的文本文件比其他文件大?

    什么是 UTF 8 编码 为什么以 utf 8 格式保存的文本文件比其他格式的文件大 例如 我在记事本中输入 A 并将其保存为 UTF 8 格式 之后 文件大小变为 4字节 Why 几乎可以肯定 因为您用来保存文件的任何内容也包括字节顺序标
  • ISO15693 (NfcV) / Tag-it HF-I 命令引发标签丢失异常

    当我尝试收发 NFC V Tag it HF I Plus Inlay 标签的命令时 大多数命令都会出现 TagLostException 从我经历过的链接来看 这个异常可能是由不正确的命令引起的 如何为 Nfc V Tag it HF I
  • 如何在不使用“~”的情况下从 sass 加载器中的 node_modules 导入样式表

    我正在设置 Storybook 实例以从 Rails 应用程序加载样式 但它无法在我的应用程序中加载导入main scss文件 两者都是样式表node modules import react table react table css i