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";
удалить ~
Вам также необходимо установить slick-carousel для CSS и шрифтов. Вот в чем фокус. Ура...
npm install slick-carousel --save
Затем импортируйте файлы css в файл App.js.
import "slick-carousel/slick/slick.css";
import "slick-carousel/slick/slick-theme.css";
Я боролся с этой проблемой, и я, наконец, нашел решение:
- просто зайдите в свой
node_modules
папку и найтиslick-carousel
папка - внутри этой находки
slick.scss
а такжеslick-theme.scss
из гладкой папки и откройте их - создать два отдельных файла с именами
_slick.scss
а также_slickTheme.scss
внутри ваших папок стиля вашего проекта - скопировать все из
slick.scss
а такжеslick-theme.scss
и поместите их в свои недавно созданные файлы (_slick.scss
а также_slickTheme.scss
) - импортировать их в свой
app.scss
файл - теперь, если вы используете веб-пакет, как я, я думаю, что вы не можете решить
'./ajax-loader.gif'
ошибка и не может устранить ошибку шрифта после этого - на самом деле эти файлы используются
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;
}
}
- закомментируйте их
Вам нужно иметь соответствующие грузчики. Используйте 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
Сбой из-за того, что вы импортируете модули css в свое приложение, а стили из slick не применяются, потому что они кэшируются. Я исправил это в моем проекте, как показано ниже:
В ваших файлах style.scss поместите это
:global {
@import 'node_modules/slick-carousel/slick/slick';
}
вам нужно установитьreact-slick
CSS-файлы без~
подпишите так:
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 .