Импортировать таблицы стилей библиотеки с модулями 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".

https://codesandbox.io/s/4j31xj3689

Если библиотека не использует css-модули (использует className атрибут вместо styleName) нам нужно отключить модули для импортированных css, чтобы имена классов остались неизменными. Это можно сделать двумя способами:

  1. Измените конфигурацию вашего Webpack
module: {
    rules: [
        {
            test: /\.(css)$/,
            use: [
                'style-loader',
                {
                    loader: 'css-loader',
                    options: {
                        modules: false
                    }
                }
            ]
        },
        ...
    ]
}
  1. Импортируйте библиотеку css прямо в вашу таблицу стилей scss (благодаря этому ответу, указывающему, как правильно выполнять.cssИмпортировать). Не забудьте исключить.css расширение файла из строки импорта. :global Директива не позволит css-модулям изменять имена классов для всех стилей в этой директиве.
:global {
    @import "~library-module-name/.../CssFileWithoutExtension";
}
Другие вопросы по тегам