React + Reactstrap + CSS 模块 + Webpack

Posted

技术标签:

【中文标题】React + Reactstrap + CSS 模块 + Webpack【英文标题】:React + Reactstrap + CSS Modules + Webpack 【发布时间】:2018-01-06 07:22:09 【问题描述】:

我一直在寻找如何组合以下内容:ReactJS + ReactStrap 和 CSS-Modules(react-css-modules 和/或 boostrap-css-modules),但是,我似乎无法拼凑这三个模块一起达到预期的效果(或在线查找任何帮助)。

这背后的想法是让 ReactStrap 元素可用,即:

import React from 'react';
import  Button  from 'reactstrap';

export default (props) => 
  return (
    <Button color="danger">Danger!</Button>
  );
;

但也允许我使用 CSS-Modules 来获得类似于以下内容的最终结果:

import React from 'react';
import CSSModules from 'react-css-modules';
import styles from './mybutton.css';

class Test extends React.Component 
    render () 
        return <Button color='danger' styleName='myButton'>Danger</div>;
    


export default CSSModules(Table, styles);

mybutton.css 可能类似于:

.myButton 
  composes: btnPrimary from "bootstrap-css-modules/css/buttons.css";
  background-color: dodgerblue;
  border-color: dodgerblue;

我也在使用 Webpack,所以我什至不知道从哪里开始将它与 Webpack 一起使用。

编辑:

我的使用方法如下:

npm install --save bootstrap@4.0.0-alpha.6

npm install --save reactstrap react-addons-transition-group react-addons-css-transition-group react react-dom

npm install --save bootstrap-css-modules

这是我的 webpack 配置

const webpack = require('webpack');

const path = require('path');
const htmlwebpackPlugin = require('html-webpack-plugin');

const ROOT_PATH = path.resolve(__dirname);

module.exports = 
    devtool: process.env.NODE_ENV === 'production' ? '' : 'source-map',
    entry: [
        path.resolve(ROOT_PATH, 'app/src/index'),
    ],
    module: 
        rules: [
            
                enforce: 'pre',
                test: /\.jsx?$/,
                loader: process.env.NODE_ENV === 'production' ? [] : ['eslint-loader'],
                include: path.resolve(ROOT_PATH, 'app'),
            ,
            
                test: /\.jsx?$/,
                exclude: /node_modules/,
                loader: 'babel-loader',
                query: 
                    presets: ['react'],
                ,
            ,
            
                test: /\.scss$/,
                loaders: ['style-loader', 'css-loader', 'sass-loader'],
            ],
    ,
    resolve: 
        extensions: ['.js', '.jsx'],
    ,
    output: 
        path: process.env.NODE_ENV === 'production' ? path.resolve(ROOT_PATH, 'app/dist') : path.resolve(ROOT_PATH, 'app/build'),
        publicPath: '/',
        filename: 'bundle.js',
    ,
    devServer: 
        contentBase: path.resolve(ROOT_PATH, 'app/dist'),
        historyApiFallback: true,
        hot: true,
        inline: true,
    ,
    plugins: [
        new webpack.HotModuleReplacementPlugin(),
        new HtmlwebpackPlugin(
            title: 'testapp',
        ),
    ],
;

谢谢

【问题讨论】:

我测试了代码,它对我有用,你能告诉你css-loader的webpack配置吗? 我使用类似的设置 webpack、react-css-modules、css-modules、react-toolbox,因此我认为我可以在这里提供帮助,因为可能我必须解决相同的问题。请描述你的主要问题是什么,如果可能的话,分享你的 webpack 配置。 我遇到了这里解释的确切问题:***.com/questions/47520696/…@hinok 如果可能的话,你能看看我的吗?谢谢! 【参考方案1】:

@tehOwner ...phew 这个问题真是太棒了。我想我完成了你想做的事情。

我创建了一个沙盒,可以在here找到。

DEMO

基本上,您需要在项目中使用this npm 模块才能使用className 属性将多个CSS 类分配给一个react 组件。

并使用类似于下面的结构设置您的组件

import React,  Component  from 'react';
import  Button  from 'reactstrap';
import CSSModules from 'react-css-modules';
import styles from './MyDangerButton.css';
import cn from 'classnames';

class MyDangerButton extends Component 
  render() 
    const myFancyDangerButton = cn(
      btn: true,
      'btn-danger': true,
      MyDangerButton: true
    );

    return (
      <div>
        <h1>My Fancy Danger Button!</h1>
        <Button className=myFancyDangerButton>Danger Button</Button>
      </div>
    );
  


export default CSSModules(MyDangerButton, styles);

? 干杯 克里斯

【讨论】:

【参考方案2】:

最新的解决方案是使用以下方法升级 react-script:

 npm upgrade --latest react-scripts

它支持 CSS 模块,所以你不需要配置任何东西。 需要做的是将 .module 添加到 CSS 文件中:从 './mybutton.css' 到 './mybutton.module.css'。并更改导入:

import styles from './mybutton.module.css';

使用这个,我们不需要执行

npm run eject 

还有。

【讨论】:

以上是关于React + Reactstrap + CSS 模块 + Webpack的主要内容,如果未能解决你的问题,请参考以下文章

出现 CSS 类但未应用样式 -REACTSTRAP - CSS MODULES

将 reactstrap 与 Next.js 一起使用

使用 reactstrap/react 制作带有星形图标的 <li> 列表项项目符号 [重复]

Reactstrap 下拉菜单打开倍数菜单

Reactstrap 多级下拉祖先不关闭

如何使用 React-Starter-kit 安装 Reactstrap