【问题标题】:styles imported with css-loader not working使用 css-loader 导入的样式不起作用
【发布时间】:2018-11-17 21:02:16
【问题描述】:

使用 bootstrap 4.1.1 构建一个 react 16.4.0 应用程序。

我正在使用 css-loader 和 webpack 为我的应用程序中的每个组件创建自定义样式表。

我的自定义样式没有任何作用。我认为这可能是引导样式具有更多点的问题,但是即使我添加了任何引导元素之外的元素,我的样式也不会产生任何效果。

基本示例:

Sidebar.js 组件:

import React from 'react';
import classes from './Sidebar.css';

const sidebar = (props) =>  {
    console.log('classes.red:', classes.red);
    return (
        <div>
            <h3 className={classes.other}>Testing Stylesheet</h3>
            <nav className="col-sm-3 col-md-2 hidded-xs-down sidebar" id={classes.red}>
                <ul className="nav flex-column">
                    <li className="nav-item">
                        <a className="nav-link active" href="#">
                            FF1493
                        </a>
                    </li>
                    <li className="nav-item">
                        <a className="nav-link active" href="#">
                            FF4500
                        </a>
                    </li>
                </ul>
            </nav>
        </div>
    )
}

export default sidebar;

这是超级简单的样式表:

#red {
    background-color: rgba(214, 21, 21, 0.842)
}

.other {
    color: green;
}

在 Sidebar.js 中,您可以看到我在哪里 console.logging 导入的“红色”样式。以下是浏览器控制台中的日志记录:classes.red: Sidebar__red__2-sUP

对于那些想知道的人,这是我的 webpack.config:

const webpack = require('webpack');
const UglifyJSPlugin = require('uglifyjs-webpack-plugin');
const path = require('path');
const ExtractTextPlugin = require('extract-text-webpack-plugin');
const autoprefixer = require('autoprefixer');

const SRC_DIR = path.join(__dirname, '/client/src');
const DIST_DIR = path.join(__dirname, '/client/dist');

module.exports = {
    entry: `${SRC_DIR}/index.jsx`,
    output: {
      path: path.resolve(__dirname, 'client/dist'),
      filename: 'bundle.js',
    },
    module: {
      rules: [
        {
          test: /\.jsx?/,
          include: SRC_DIR,
          loader: 'babel-loader',
          query: {
            presets: ['react', 'es2015'],
            plugins: ['syntax-dynamic-import'],
          },
        },
        {
          test: /\.css$/,
          loader: ExtractTextPlugin.extract(
            Object.assign(
              {
                fallback: {
                  loader: require.resolve('style-loader'),
                  options: {
                    hmr: false,
                  },
                },
                use: [
                  {
                    loader: require.resolve('css-loader'),
                    options: {
                      importLoaders: 1,
                      minimize: true,
                      // sourceMap: shouldUseSourceMap,
                      modules: true,
                      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 4 versions',
                            'Firefox ESR',
                            'not ie < 9', // React doesn't support IE8 anyway
                          ],
                          flexbox: 'no-2009',
                        }),
                      ],
                    },
                  },
                ],
              },
              // extractTextPluginOptions
            )
          )
        },
      ],
    },
    resolve: {
      extensions: ['.js', '.jsx']
    },
    plugins: [
      new webpack.DefinePlugin({
        'process.env': {
          NODE_ENV: JSON.stringify('development'),
        },
      }),
      new ExtractTextPlugin("styles.css"),
      // ,
      // new UglifyJSPlugin(),
    ],
  };

可能是因为我在 webpack.config 中注释掉了一些东西:sourceMap: shouldUseSourceMap, 在选项和extractTextPluginOptions 下?

我将它们注释掉,因为我在设置过程中遇到错误并且不能 100% 确定它们的作用。我对 webpack 的使用仍在不断增长,并从我使用 Facebook 的 create-react-app 构建的另一个应用程序中借用了一些配置设置。

欢迎输入。先感谢您! 迈克

【问题讨论】:

  • 您是否使用开发者控制台查看了实际生成的 css 文件?
  • 谢谢你,里奥。如果我点击“+”,我会看到选择器的唯一哈希,但它的内容是空的。

标签: javascript css reactjs webpack bootstrap-4


【解决方案1】:

你应该能够:

import './Sidebar.css'; //don't name the import

然后在你的元素上使用类

<h3 className="other">Testing Stylesheet</h3>

(正如@Leo 建议的那样,打开开发工具并搜索css 以查看是否发送到浏览器)

【讨论】:

  • 嗨,Leo,这有效,但只有在更改我的 webpack.config 文件之后。感谢我的一位朋友,他帮助我评估了那里的必要更改。非常感谢你,狮子座。
猜你喜欢
  • 2018-04-22
  • 1970-01-01
  • 1970-01-01
  • 2018-05-18
  • 2014-06-05
  • 2016-04-02
  • 2017-01-15
  • 2017-03-10
相关资源
最近更新 更多