16

在这里反应初学者。我的应用程序使用 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'
                }
              }
            ],
          }
4

8 回答 8

44

你变成这样:

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

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

删除~

于 2019-04-30T09:59:58.583 回答
34

你可能错过了这个:

npm install slick-carousel
于 2019-01-17T08:58:11.960 回答
20

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

一、安装slick-carousel

 npm install slick-carousel --save

如果你使用纱线,你可以使用

 yarn add slick-carousel

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

 import "slick-carousel/slick/slick.css";
 import "slick-carousel/slick/slick-theme.css";
于 2019-11-20T12:35:40.660 回答
13

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

  1. 只需进入您的node_modules文件夹并找到slick-carousel文件夹
  2. 在那个findslick.scssslick-theme.scssslick文件夹中打开它们
  3. 在项目的样式文件夹中_slick.scss创建两个单独的文件_slickTheme.scss
  4. slick.scss从and复制所有slick-theme.scss内容并将它们放入新创建的文件 ( _slick.scssand _slickTheme.scss)
  5. 将它们导入您的app.scss文件中
  6. 现在如果你像我一样使用 webpack,我猜你会得到 can't resolve './ajax-loader.gif'error 并且在那之后无法解决字体错误
  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. 将它们注释掉
于 2018-08-07T12:20:23.183 回答
4

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

(这里是文件加载器的配置设置)

所以最后,你的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';
于 2018-09-18T16:38:29.233 回答
1

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

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

:global {
    @import 'node_modules/slick-carousel/slick/slick';
}
于 2018-06-21T09:31:40.007 回答
0

你错过了安装光滑的旋转木马。试试这个代码

npm install slick-carousel

点击这里查看更多详情

于 2021-06-04T17:30:29.923 回答
0

要导入样式,请确保您首先安装了 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 文档页面

于 2021-02-22T07:19:34.867 回答