【问题标题】:undefined css module class names未定义的 css 模块类名
【发布时间】:2018-06-21 16:11:30
【问题描述】:

我有以下组件,导入的 css 和 webpack 配置 - 显然我已经导入了相关的 css 模块,但是我的 react 输出 className={css__main.container} 和导入的 css-loader 之间的连接似乎不是由 react 建立的 - css_main.container 没有映射到.main__container___2MJY(它返回undefined,因此react/webpack 不包含在输出中) - 我敢肯定,作为css模块的新手,我只是错过了一步,任何人都可以指出它可能是什么? ("css-loader": "^0.28.11" 安装在 package.json 中)。

import React from 'react';
import {Route, browserHistory, Switch, Link, BrowserRouter, HashRouter} from 'react-router-dom';
import css__main from "../css/main.css";

import NoMatch from "./no-match.js";
import ButtonLink from "../components/buttonLink.js";
import List from "./lists/list-base.js";
import Home from "./subs/home.js";


class Main extends React.Component {
  render(){
    console.log( JSON.stringify( css__main ));
    //[["./src/css/main.css",".main__container___2MJY_{border:1px solid #d0d0d0;-moz-box-shadow:0 0 8px #d0d0d0;box-shadow:0 0 8px #d0d0d0;overflow:hidden;height:80vh;display:flex;flex-direction:column;justify-content:flex-start}.main__header___3ZGBv{color:#444;background-color:transparent;border-bottom:1px solid #d0d0d0;font-size:1.2em;height:65px;display:flex;flex-direction:row;align-items:stretch;justify-content:space-between;padding:15px 20px}",""]]
    return (
      <div id="container" className={css__main.container}>
        <div className={css__main.header}>
          Flix AB Testing
        </div>
        <HashRouter history={browserHistory}>
          <Switch>
            <Route exact path="/" component={Home}/>
            <Route path="/active" component={List}/>
            <Route path="/inactive" component={List}/>
            <Route path="/expire" component={List}/>
            <Route path="/delete" component={List}/>
            <Route component={NoMatch}/>
          </Switch>
        </HashRouter>
      </div>
    );
  };
} 

export default Main;

导入这个 css(我可以输出到控制台,如上面的代码块所示):

.container {
  border: 1px solid #D0D0D0;
  -moz-box-shadow: 0 0 8px #D0D0D0;
  box-shadow: 0 0 8px #D0D0D0;
  overflow: hidden;
  height: 80vh;
  display: flex;
  flex-direction: column;
  justify-content: flex-start;
}

.header {
  color: #444;
  background-color: transparent;
  border-bottom: 1px solid #D0D0D0;
  font-size: 1.2em;
  height: 65px;
  display: flex;
  flex-direction: row;
  align-items: stretch;
  justify-content: space-between;
  padding: 15px 20px;
}

我的 webpack 配置。如下:

module.exports = {
  entry: [
    './src/index.js'
  ],
  module: {
    rules: [
      {
        test: /\.(js|jsx)$/,
        exclude: /node_modules/,
        use: ['babel-loader']
      },
      {
        test: /\.css$/,
        loader: 'css-loader',
        options: {
          minimize: true,
          camelCase: 'dashes',
          modules: true,
          localIdentName: '[name]__[local]___[hash:base64:5]'
        }
      }
    ]
  },
  resolve: {
    extensions: ['*', '.js', '.jsx', '.css']
  },
  output: {
    path: __dirname + '/dist',
    publicPath: '/',
    filename: 'bundle.js'
  },
  devServer: {
    contentBase: './dist'
  }
};

【问题讨论】:

    标签: reactjs webpack css-loader


    【解决方案1】:

    好的 - 所以它以下列方式工作。最后一步是包含style-loadercss-loader。我已经读过其他地方不需要将模块设置为true,因此必须做进一步的研究。

    我认为有更多知识的人(或者当我进一步加快速度时)将能够在这里将一些松散的末端联系在一起 - 但如果您遇到与我相同的问题,这将起作用。

    我已经用 :local(myclass) {/some css here/} 包围了我的 css 类,以便暂时获得本地范围,直到我更好地理解为止。

    {
            test: /\.css$/,
            use: [
              'style-loader',
              {
                loader: 'css-loader',
                options: {
                  minimize: true,
                  camelCase: 'dashes',
                  modules: true,
                  localIdentName: '[name]__[local]___[hash:base64:5]'
                }
              }
            ]
          }
    

    如果您不担心选项,下面的替代方案是最简单的。

    {
     use: ['style-loader', 'css-loader']
    }
    

    【讨论】:

      猜你喜欢
      • 2011-04-06
      • 1970-01-01
      • 2015-08-09
      • 1970-01-01
      • 2020-11-13
      • 2020-06-28
      • 2023-03-17
      • 2018-12-28
      • 1970-01-01
      相关资源
      最近更新 更多