【问题标题】:react-slick: Import CSS from slick-carousel failsreact-slick:从 slick-carousel 导入 CSS 失败
【发布时间】:2018-07-24 13:19:49
【问题描述】:

在这里反应初学者。我的应用程序使用 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,它会起作用,但我宁愿避免该网络调用,因为我认为它会影响初始加载时页面的呈现。

我尝试按照 instructions 配置 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'
                }
              }
            ],
          }

【问题讨论】:

  • 这似乎与 webpack configuration 有关,您可能希望从下向上滚动以找到解决方案,基本上我会检查是否允许 webpack 通过 resolve 处理 .scss 文件@部分配置
  • 谢谢 - 我已经用 webpack.config 中的当前内容更新了我的帖子 - 我已经设置为处理 .scss 文件。
  • 另一件事 - 我还将 susy 和 normalize 导入到我的主要 styles.scss 中,没有任何问题;只有当我导入 slick-themes.css 和 slick.css 时才会出现问题。
  • 抱歉,打扰了,这几天我发布了一个react carousel slider组件,通过npm install react-carousel-slider安装它,不需要导入其他东西,默认css样式但仍然努力为自定义 css 提供灵活性,也许您可​​以尝试一下:)

标签: reactjs react-slick css-import


【解决方案1】:

它失败了,因为您在应用程序中导入 css 模块,并且没有应用来自 slick 的样式,因为它们正在被缓存。 我已经在我的项目中修复了它,如下所示:

在你的 style.scss 文件中放这个

:global {
    @import 'node_modules/slick-carousel/slick/slick';
}

【讨论】:

  • 我打赌在你的情况下会是 app.scss
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

    您需要有合适的装载机。 将style-loadercss-loader 结合用于CSS。 使用file-loaderurl-loader 加载CSS 文件中链接的字体和图像。

    (Here are configuration settings for the file-loader)

    所以最后,您的 webpack.config.js 应该包含如下内容:

    module: {
        rules: [
            {
                test: /\.js$/,
                exclude: /node_modules/,
                use: {
                    loader: "babel-loader",
                    options: {
                        presets: [
                            "@babel/preset-env",
                            "@babel/preset-react"
                        ].map(require.resolve)
                    }
                }
            },
            {
                test: /\.css$/,
                use: [
                    {loader: "style-loader"},
                    {loader: "css-loader"}
                ]
            },
            {
                test: /\.(png|jpg|gif)$/i,
                use: [
                    {
                        loader: 'url-loader',
                        options: {
                            limit: 8192
                        }
                    }
                ]
            },
            {
                test: /\.(woff(2)?|ttf|eot|svg)(\?v=\d+\.\d+\.\d+)?$/,
                use: [{
                    loader: 'file-loader',
                    options: {
                        name: '[name].[ext]',
                        outputPath: 'fonts/'
                    }
                }]
            }
        ]
    },
    

    之后,您可以简单地将样式导入您的应用程序入口点(例如 /src/index.js):

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

    【讨论】:

    • 它对我有用。谢谢 :) 支持@Mališa Stanojević
    【解决方案4】:

    你可能错过了:

    npm install slick-carousel
    

    【讨论】:

    • 费迪迪克!这正是我在这个问题上的情况。我没有意识到我在专注于文档说明的同时安装了两次 reack-slick。一些干扰......(=
    • 谢谢!我完全忘了安装它。帮了大忙
    • 谢谢,我被卡住了,这救了我。
    【解决方案5】:

    你变成了这样:

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

    删除~

    【讨论】:

    • 谢谢伙计,这行得通。但是 import 语句中的 '~' 是什么意思呢?
    【解决方案6】:

    您还需要为 CSS 和字体安装 slick-carousel。 这就是诀窍。 干杯...

    首先,安装slick-carousel

     npm install slick-carousel --save
    

    如果你用的是yarn,你可以用

     yarn add slick-carousel
    

    然后在你的 App.js 文件中导入 CSS 文件。

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

    【讨论】:

      【解决方案7】:

      要导入样式,请确保您首先安装了 slick-carousel:

      npm install slick-carousel --save
      

      然后:

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

      注意:但要注意 slick-carousel 对 jQuery 有对等依赖 您或您的同事可能不希望在控制台中看到的内容 输出,因此您可以随时从那里获取 CSS 并将其转换为 您可能正在使用的 JS 解决方案中的任何 CSS。

      此信息取自react-slick documentation page

      【讨论】:

        【解决方案8】:

        您错过了安装光滑的轮播。试试这个代码

        npm install slick-carousel
        

        Click here for more Details

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-03-09
          • 1970-01-01
          • 1970-01-01
          • 2017-08-05
          • 2015-10-25
          • 2017-11-13
          • 2020-11-14
          • 1970-01-01
          相关资源
          最近更新 更多