reactjs React浮油:从slick-carousel导入CSS失败

2exbekwf  于 2023-02-08  发布在  React
关注(0)|答案(9)|浏览(210)

React初学者在这里。我的应用使用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'
如果我从CDN将css添加到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'
                }
              }
            ],
          }
vbkedwbf

vbkedwbf1#

您将更改为:

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

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

删除**~**

uoifb46i

uoifb46i2#

你可能会错过这个

npm install slick-carousel
jjhzyzn0

jjhzyzn03#

你还需要安装用于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";
fjnneemd

fjnneemd4#

我一直在纠结这个问题,我终于找到了解决方案:
1.只要进入你的node_modules文件夹并找到slick-carousel文件夹
1.在Slick文件夹中查找slick.scssslick-theme.scss并将其打开
1.在项目的样式文件夹中创建两个名为_slick.scss_slickTheme.scss的单独文件
1.从slick.scssslick-theme.scss复制所有文件,并将它们放入新创建的文件(_slick.scss_slickTheme.scss
1.将它们导入app.scss文件
1.现在,如果你像我一样使用webpack,我猜你会得到无法解决'./ajax-loader.gif'错误,并且无法解决字体错误
1.事实上,这些文件已经被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.注解掉它们

ncecgwcz

ncecgwcz5#

您需要有适当的加载器。使用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';
ctehm74n

ctehm74n6#

它失败是因为你在你的应用中导入css模块,而来自slick的样式没有被应用,因为它们被缓存了。我已经在我的项目中修复了它,如下所示:
在您的样式中。scss文件将此

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

0yycz8jy7#

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

npm install slick-carousel

Click here for more Details

xu3bshqb

xu3bshqb8#

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

npm install slick-carousel --save

然后:

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

注意:但是请注意,slick-carousel对jQuery具有对等依赖性,您或您的同事可能不希望在控制台输出中看到这一点,因此您可以随时从那里获取CSS,并将其转换为您可能正在使用的任何CSS in JS解决方案。
此信息取自react-slick documentation page

6yjfywim

6yjfywim9#

您需要安装react-slick CSS文件,不带~符号,如下所示:

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

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

并且您还需要将它们导入到显示slick滑块的组件中
例如,如果你有一个滑块组件要用在主页组件中,你需要在主页中导入光滑的CSS文件。2我很喜欢。
如果您要将方向更改为rtl,则需要使用ltr作为滑块
并选中要安装的slick-carousel

相关问题