create-react-app创建出来项目,如何设置CSS模块化?

问题起因

最近在研究react,根据官方提供的create-react-app脚手架搭建了一个项目,但是像下面这样引入CSS的时候,会发现全局都会生效,这明显不合理嘛,那么,怎么设置呢?

import './header.css'; // 这样引入相当于全局引入了

CSS模块化

我们知道,在webpack中,可以通过CSS-loaderstyle-loader对CSS文件进行一些打包处理,里面有一些配置项,可以将CSS打包成一个模块,然后引入,一般webpack是这样设置的

{
  test: /\.css$/,
  loader: 'style-loader!css-loader?modules&importLoaders=1&localIdentName=[name]_[local]__[hash:base64:5]'
}

其中modules为true时,就是把CSS打包为模块的控制参数

如何设置?

用create-react-app创建出来的项目,我们得先找到那个配置文件在哪,文件默认路径为:\node_modules\react-scripts\config\webpack.config.dev.js,然后找到如下代码,新增一个参数modules:true就可以了:

          {
            test: /\.css$/,
            use: [
              require.resolve('style-loader'),
              {
                loader: require.resolve('css-loader'),
                options: {
                  importLoaders: 1,
                  modules: true
                },
              },
              {
                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',
                    }),
                  ],
                },
              },
            ],
          },

最后

在你需要用到的模块引入

import headerCss from './header.css';

当然,别忘了生产线的配置也改下,也就是webpack.config.prod.js文件

posted @ 2018-05-05 21:33  青春大蜗牛  阅读(4738)  评论(1编辑  收藏  举报