response-slick: не удается импортировать CSS из slick-carousel

Реактив новичка здесь. Мое приложение использует create-реагировать-приложение, и я вытягиваю реагирующее пятно для карусели. Я пытаюсь следовать указаниям, которые указаны в настройке для реакции-слика, но следующее не работает для меня:

@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 в index.html из CDN, но я бы предпочел избежать этого сетевого вызова, так как считаю, что это влияет на рендеринг страницы при начальной загрузке.

Я попытался следовать инструкциям по настройке create-реагировать-app для использования относительных путей, но у меня это тоже не сработало. Может быть, я совершенно не понимаю, но я подумал, что обозначение ~ позволит мне импортировать scss из пакета в / node_modules.

Любые предложения / разъяснения будут с благодарностью.

Обновление: добавление установки из моего файла webpack.config (большая часть которого является настройкой по умолчанию из create-реагировать-приложение). { 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' } } ], }

9 ответов

Вы меняете на это:

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

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

удалить ~

Вы могли пропустить это:

npm install slick-carousel

Вам также необходимо установить slick-carousel для CSS и шрифтов. Вот в чем фокус. Ура...

npm install slick-carousel --save

Затем импортируйте файлы css в файл App.js.

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

Я боролся с этой проблемой, и я, наконец, нашел решение:

  1. просто зайдите в свой node_modules папку и найти slick-carousel папка
  2. внутри этой находки slick.scss а также slick-theme.scss из гладкой папки и откройте их
  3. создать два отдельных файла с именами _slick.scss а также _slickTheme.scss внутри ваших папок стиля вашего проекта
  4. скопировать все из slick.scss а также slick-theme.scss и поместите их в свои недавно созданные файлы (_slick.scss а также _slickTheme.scss)
  5. импортировать их в свой app.scssфайл
  6. теперь, если вы используете веб-пакет, как я, я думаю, что вы не можете решить './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. закомментируйте их

Вам нужно иметь соответствующие грузчики. Используйте style-loader в сочетании с css-loader для CSS. Используйте file-loader и url-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';

You are missed installing a slick carousel. try this code

      npm install slick-carousel

Click here for more Details

Сбой из-за того, что вы импортируете модули css в свое приложение, а стили из slick не применяются, потому что они кэшируются. Я исправил это в моем проекте, как показано ниже:

В ваших файлах style.scss поместите это

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

вам нужно установитьreact-slickCSS-файлы без~подпишите так:

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

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

и вам нужно импортировать их также в компонент, который показывает ваш слайдер

например, если у вас есть **компонент слайдера**, который будет использоваться в компоненте Home , вам также необходимо импортировать гладкие файлы CSS в Home. это сработало для меня.

и если вы меняете направление наrtl, вам нужно использоватьltrдля слайдера

и проверитьslick-carouselбыть установленным

Чтобы импортировать стили, убедитесь, что вы сначала установили 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 в JS, которое вы можете использовать.

Эта информация была взята со страницы документации response-slick .

Другие вопросы по тегам