react-slick:从 slick-carousel 导入 CSS 失败

新手上路,请多包涵

在这里反应初学者。我的应用程序使用 create-react-app,并且我正在使用 react-slick 进行轮播。我正在尝试按照 react-slick 设置中提供的说明进行操作,但以下内容对我不起作用:

@import "~slick-carousel/slick/slick.css"; @import "~slick-carousel/slick/slick-theme.css";

我收到以下错误:

./src/components/Homepage.scss Module not found: Can't resolve '~slick-carousel/slick/slick.css' in '/Users/simon/Dev/frischideas/site-new/src/components'

如果我将 css 从 CDN 添加到 index.html,它会起作用,但我宁愿避免该网络调用,因为我相信它会影响初始加载时页面的呈现。

我尝试按照配置 create-react-app 以使用相对路径的 说明 进行操作,但这对我也不起作用。也许我完全误解了,但我认为 ~ 符号允许我从 /node_modules 中的包中导入 scss。

任何建议/澄清将不胜感激。

更新:从我的 webpack.config 文件中添加设置(其中大部分是 create-react-app 的默认设置)。

 {
            test: /\.scss$/,
            use: [
              require.resolve('classnames-loader'),
              require.resolve('style-loader'), {
                loader: require.resolve('css-loader'),
                options: {
                  importLoaders: 1,
                  modules: 1,
                  localIdentName: "[name]__[local]___[hash:base64:5]"
                },
              },{
                loader: require.resolve('postcss-loader'),
                options: {
                  // Necessary for external CSS imports to work
                  // https://github.com/facebookincubator/create-react-app/issues/2677
                  ident: 'postcss',
                  plugins: () => [
                    require('postcss-flexbugs-fixes'),
                    autoprefixer({
                      browsers: [
                        '>1%',
                        'last 6 versions',
                        'Firefox ESR',
                        'not ie < 9', // React doesn't support IE8 anyway,'
                      ],
                      remove: false,
                      flexbox: 'no-2009',
                    }),
                  ],
                },
              },{
                loader: require.resolve('sass-loader'),
                options: {
                  outputStyle: 'expanded'
                }
              }
            ],
          }

原文由 flysi3000 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.9k
2 个回答

我一直在努力解决这个问题,我终于找到了解决方案:

  1. 只需进入您的 node_modules 文件夹并找到 slick-carousel 文件夹
  2. 在该文件夹中找到 slick.scssslick-theme.scss 并打开它们
  3. 在项目的样式文件夹中创建两个名为 _slick.scss_slickTheme.scss 的单独文件
  4. slick.scssslick-theme.scss 复制所有文件并将它们放入新创建的文件中( _slick.scss_slickTheme.scss
  5. 将它们导入您的 app.scss 文件
  6. 现在如果你像我一样使用 webpack,我猜你得到了 can’t resolve './ajax-loader.gif' 错误并且在那之后无法解决字体错误
  7. 实际上,这些文件已被 slick-carousel css 它自己使用,为此我们可以简单地进入您新创建的 _slickTheme.scss 并找到这些行
/* Slider */

.slick-list {
    .slick-loading & {
        background: #fff slick-image-url("ajax-loader.gif") center center no-repeat;
    }
}

/* Icons */
@if $slick-font-family == "slick" {
    @font-face {
        font-family: "slick";
        src: slick-font-url("slick.eot");
        src: slick-font-url("slick.eot?#iefix") format("embedded-opentype"), slick-font-url("slick.woff") format("woff"), slick-font-url("slick.ttf") format("truetype"), slick-font-url("slick.svg#slick") format("svg");
        font-weight: normal;
        font-style: normal;
    }
}

  1. 将它们注释掉

原文由 amdev 发布,翻译遵循 CC BY-SA 4.0 许可协议

你变成这样:

 import "slick-carousel/slick/slick.css";

import "slick-carousel/slick/slick-theme.css";

删除 ~

原文由 putra irawan 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进