简体   繁体   English

类名没有出现在React中

[英]classnames not appearing React

Not Sure where am i going wrong.This is my webpack.prod for bundling client-side. 不知道我要去哪里错了。这是我的webpack.prod用于捆绑客户端。 but some how classNames are not appearing in my html 但是一些classNames如何不出现在我的html中

const path = require('path');
const webpack = require('webpack');
const dependencies = require('./package.json');
const ManifestPlugin = require('webpack-manifest-plugin');
const CleanWebpackPlugin = require('clean-webpack-plugin');
const ExtractTextPlugin = require('extract-text-webpack-plugin');

const VENDOR_LIBS = [];
Object.entries(dependencies.dependencies).forEach(([key, value]) => {
  VENDOR_LIBS.push(key);
});

const BrowserConfig = {
  entry: {
    bundle: './src/index',
    vendor: VENDOR_LIBS,
  },
  output: {
    path: path.resolve('./dist'),
    publicPath: '/',
    filename: '[name].js',
    pathinfo: true,
  },
  resolve: {
    extensions: ['.js', '.jsx', '.json', '.scss', '.css'],
  },
  module: {
    rules: [
      {
        use: ['react-hot-loader/webpack', 'babel-loader'],
        test: /\.(js|jsx)$/,
        exclude: /node_modules/,
      },
      {
        test: /\.(woff|woff2|eot|ttf|svg|otf)$/,
        use: 'file-loader?limit=1024&name=fonts/[name].[ext]',
      },
      {
        test: /\.(gif|jpe?g|png|ico)$/,
        loader: ['file-loader?name=images/[name].[ext]&limit=100000'],
      },
      {
        test: /\.(scss|css)$/,
        exclude: /node_modules/,
        use: ExtractTextPlugin.extract({
          fallback: 'style-loader',
          use: [
            { loader: 'css-loader',
              options: {
                sourceMap: true,
                camelCase: true,
                minimize: true,
                namedExport: true,
                modules: true,
                importLoaders: 2,
                localIdentName: '[hash:base64:5]',
              },
            },
            { loader: 'postcss-loader',
              options: {
                sourceMap: true,
                plugins: () => ([
                  require('autoprefixer')({
                    browsers: ['last 2 versions', 'ie >= 9'],
                  }),
                ]),
              },
            },
            // { loader: 'sass-loader', options: { sourceMap: true } },
          ],
        }),
      },
    ],
  },
  plugins: [
    new webpack.HotModuleReplacementPlugin(),
    new webpack.optimize.OccurrenceOrderPlugin(),
    new webpack.optimize.CommonsChunkPlugin({
      name: ['vendor'],
    }),
    new CleanWebpackPlugin(['dist']),
    new webpack.NoEmitOnErrorsPlugin(),
    new webpack.optimize.AggressiveMergingPlugin(),
    new webpack.DefinePlugin({
      'process.env': {
        'NODE_ENV': JSON.stringify(process.env.NODE_ENV),
      },
      BROWSER: true,
      DEBUG: false,
      __DEVTOOLS__: false,
    }),
    new ManifestPlugin({
      fileName: './manifest.json',
    }),
    new ExtractTextPlugin({
      filename: '[name].css',
      allChunks: true,
    }),
  ],
  devServer: {
    contentBase: './dist',
    hot: true,
    historyApiFallback: true,
  },
  devtool: 'source-map',
};

module.exports = BrowserConfig;

This is header.js file where in, i have imported styles from header.scss file. 这是header.js文件,在其中,我从header.scss文件导入了样式。

import React, { Component } from 'react';
import styles from './header.scss';

    class Header extends Component {
      render() {
        return (
          <div className={ styles.headerContainer }>This is Header</div>
        );
      }
    }

    export default Header;

header.scss file consists of the following code: header.scss文件由以下代码组成:

.headerContainer{
  border: 1px solid #ddd;
}

This is screenshot of my console where in classes are not appearing. 这是我的控制台的屏幕截图,其中没有出现类。 enter image description here 在此处输入图片说明

i have included the following dependencies in my package.json 我在package.json中包含以下依赖项

{
  "name": "wander",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "start": "NODE_ENV='development' webpack --config='webpack.server.js' && node dist/serverdist.js",
    "build": "NODE_ENV='production' webpack -p --config='webpack.prod' && NODE_ENV='production' webpack -p --config='webpack.server' && node dist/serverdist.js"
  },
  "author": "",
  "license": "ISC",
  "dependencies": {
    "history": "^4.7.2",
    "react": "^16.0.0",
    "react-dom": "^16.0.0",
    "react-redux": "^5.0.6",
    "react-router": "^4.2.0",
    "react-router-dom": "^4.2.2",
    "redux": "^3.7.2"
  },
  "devDependencies": {
    "autoprefixer": "^7.1.5",
    "babel-cli": "^6.26.0",
    "babel-core": "^6.26.0",
    "babel-loader": "^7.1.2",
    "babel-plugin-css-modules-transform": "^1.2.7",
    "babel-preset-es2015": "^6.24.1",
    "babel-preset-react": "^6.24.1",
    "babel-preset-stage-0": "^6.24.1",
    "babel-preset-stage-1": "^6.24.1",
    "clean-webpack-plugin": "^0.1.17",
    "compression-webpack-plugin": "^1.0.1",
    "css-loader": "^0.28.7",
    "eslint": "^4.8.0",
    "eslint-config-airbnb": "^15.1.0",
    "eslint-plugin-import": "^2.7.0",
    "eslint-plugin-jsx-a11y": "^6.0.2",
    "eslint-plugin-react": "^7.4.0",
    "express": "^4.16.1",
    "extract-text-webpack-plugin": "^3.0.0",
    "file-loader": "^1.1.4",
    "html-webpack-plugin": "^2.30.1",
    "json-loader": "^0.5.7",
    "node-sass": "^4.5.3",
    "postcss-loader": "^2.0.6",
    "react-hot-loader": "^3.0.0-beta.7",
    "sass-loader": "^6.0.6",
    "style-loader": "^0.18.2",
    "url-loader": "^0.5.9",
    "webpack": "^3.6.0",
    "webpack-bundle-analyzer": "^2.9.0",
    "webpack-dev-middleware": "^1.12.0",
    "webpack-dev-server": "^2.9.1",
    "webpack-hot-middleware": "^2.19.1",
    "webpack-manifest-plugin": "^1.3.2",
    "webpack-node-externals": "^1.6.0"
  }
}

on serverside i have code like this; 在服务器端,我有这样的代码;

app.use(express.static('dist'));

app.get('*', (req, res) => {
  if (process.env.NODE_ENV === 'production') {
    res.send(`
      <!DOCTYPE html>
      <head>
        <title>Wander Blog</title>
        <link rel="stylesheet" type="text/css" href="/bundle.css">
      </head>
      <body>
        <div id='app'>${renderToString(<App />)}</div>
        <script type="text/javascript" src="/vendor.js" defer></script>
        <script type="text/javascript" src="/bundle.js" defer></script>
      </body>
    </html>
  `);
  }
});

You're mixing up the concept of inline styles and CSS. 您正在混淆内联样式和CSS的概念。

<div className={ styles.headerContainer }>This is Header</div>

Defined the className as the name in your scss file. 在您的scss文件中将className定义为名称。

<div className='headerContainer'>This is Header</div>

If you want to use inline styles in the future, you should be making an object of inline styles and using the style prop. 如果将来要使用内联样式,则应使对象成为内联样式并使用style道具。

<div style={styles.headerContainer}>This is Header</div>

But again, I have to emphasize that CSS and inline styles are not the same. 但是,我再次强调,CSS和内联样式并不相同。

Loading CSS directly into component's class name is only doable using style-loader , which you only use as a fallback to extract-text-plugin . 仅可以使用style-loader CSS直接加载到组件的类名中,您只能将其用作后备extract-text-plugin

You have to add style-loader to your list of loaders as well. 您还必须将style-loader添加style-loader列表中。 Like this: 像这样:

use: ExtractTextPlugin.extract({
          fallback: 'style-loader',
          use: [
            'style-loader',
            { loader: 'css-loader',
              options: {
                sourceMap: true,
                camelCase: true,
                minimize: true,
                namedExport: true,
                modules: true,
                importLoaders: 2,
                localIdentName: '[hash:base64:5]',
              },
            },
            { loader: 'postcss-loader',
              options: {
                sourceMap: true,
                plugins: () => ([
                  require('autoprefixer')({
                    browsers: ['last 2 versions', 'ie >= 9'],
                  }),
                ]),
              },
            },
            { loader: 'sass-loader', options: { sourceMap: true } },
          ],
        }),
      },
    ],
  },

Also, if your'e using sass, you should also use sass-loader. 另外,如果您使用的是sass,则还应该使用sass-loader。

只需在header.js文件中使用className="headerContainer"

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM