Импортировать таблицы стилей библиотеки с модулями Babel-Plugin-React-Css-
Я пытаюсь включить CSS другой библиотеки для их компонента в моем собственном приложении. Для справки я пытаюсь использовать эту библиотеку таблиц данных: https://github.com/filipdanic/spicy-datatable.
В документах говорится Out of the box, spicy-datatable is bare-bones. Include this CSS starter file in your project to get the look from the demo. Edit it to suit your needs.
Я попытался импортировать таблицу стилей вверху компонента, который я строю, следующим образом: import * as spicy from 'spicy-datatable/src/sample-styles.css';
в моем собственном файле компонента. Это не было в стиле. Я пытался положить сырой код в мой index.scss
файл в моем assets/styles
папка - не работает. Я пытался положить его в свой собственный файл стилей ./component.scss
- не работал.
У меня они сейчас настроены как:
import * as styles from './component.scss';
import * as spicy from 'spicy-datatable/src/sample-styles.css';
и получаю ошибку:
Module parse failed: Unexpected token (4:0)
You may need an appropriate loader to handle this file type.
webpack.config.js
const dirNode = 'node_modules';
const dirApp = path.join(__dirname, 'client');
const dirAssets = path.join(__dirname, 'assets');
/**
* Webpack Configuration
*/
module.exports = {
entry: {
vendor: ['lodash'],
bundle: path.join(dirApp, 'index')
},
resolve: {
modules: [dirNode, dirApp, dirAssets]
},
plugins: [],
module: {
rules: [
// BABEL
{
test: /\.js$/,
loader: 'babel-loader',
exclude: /(node_modules)/,
options: {
compact: true
}
},
// CSS / SASS
{
test: /\.(scss)$/,
use: [
'style-loader',
{
loader: 'css-loader',
options: {
importLoaders: 1,
modules: true,
localIdentName: '[path]___[name]__[local]___[hash:base64:5]'
}
},
'sass-loader'
]
},
// IMAGES
{
test: /\.(jpe?g|png|gif)$/,
loader: 'file-loader',
options: {
name: '[path][name].[ext]'
}
}
]
}
};
.babelrc
"plugins": [
[
"react-css-modules",
{
"filetypes": {
".scss": {
"syntax": "postcss-scss"
}
},
"webpackHotModuleReloading": true
}
]
Я не уверен, если мне нужно добавить что-то, чтобы конкретно обрабатывать .css
файлы, я впервые работаю с модулями CSS. Я думал, что реагирующие-css-модули сделали это, поэтому я не совсем уверен, почему файл CSS не загружается правильно.
Редактировать:
Отредактировал мой веб-пакет, чтобы включить CSS:
{
test: /\.(css)$/,
use: [
'style-loader',
{
loader: 'css-loader',
options: {
modules: true,
localIdentName: '[path]___[name]__[local]___[hash:base64:5]'
}
}
]
},
Ошибка исчезла, но стили по-прежнему не отображаются.
1 ответ
Не могли бы вы попробовать изменить ниже:
import * as spicy from 'spicy-datatable/src/sample-styles.css';
в
import from 'spicy-datatable/src/sample-styles.css';
Если вы используете CSS-модули, попробуйте ниже:
import spicy from 'spicy-datatable/src/sample-styles.css';
а затем используйте стиль элемента JSX, как показано ниже:
<h1 className={classes.<className in CSS here>}>
Я установил кодовую коробку с библиотекой с пряными данными, импортировал стили и выглядит как примененный. Стили находятся в файле "Hello.css" и импортируются в "index.js".
Если библиотека не использует css-модули (использует className
атрибут вместо styleName
) нам нужно отключить модули для импортированных css, чтобы имена классов остались неизменными. Это можно сделать двумя способами:
- Измените конфигурацию вашего Webpack
module: {
rules: [
{
test: /\.(css)$/,
use: [
'style-loader',
{
loader: 'css-loader',
options: {
modules: false
}
}
]
},
...
]
}
- Импортируйте библиотеку css прямо в вашу таблицу стилей scss (благодаря этому ответу, указывающему, как правильно выполнять
.css
Импортировать). Не забудьте исключить.css
расширение файла из строки импорта.:global
Директива не позволит css-модулям изменять имена классов для всех стилей в этой директиве.
:global {
@import "~library-module-name/.../CssFileWithoutExtension";
}