react 项目 使用css modules模块化

1.vue项目的组件中有一个scoped属性,可以把style代码私有化,只在当前组件生效,react怎么做呢?

react项目需要在webpack里面配置,首先运行npm run eject可以将webpack.config.js文件从nodemodules中暴露出来

2.很多博客是这么写的

{
    loader: 'css-loader',
    options: {
        modules: true, // 开启模块化
        localIdentName: '[local]__[name]--[hash:base64:5]'//重命名规则
    }
}

但是我的config文件是这样的

{
  test: cssRegex,   // 正则表达式/\.css$/
  exclude: cssModuleRegex,
  use: getStyleLoaders({
    importLoaders: 1,
    sourceMap: isEnvProduction && shouldUseSourceMap,
  }),  
  sideEffects: true,
}

getStyleLoaders是一个方法,第一个参数是一个对象,也就是第一张图片里面的options

所以我写成了

{
  test: cssRegex,
  exclude: cssModuleRegex,
  use: getStyleLoaders({
    importLoaders: 1,
    modules:true,
    localIdentName: '[name]__[local]--[hash:base64:5]',
    sourceMap: isEnvProduction && shouldUseSourceMap,
  }),  
  sideEffects: true,
}

3.报错了:options has an unknown property 'localIdentName'

不认识localIdentName这个参数

4.最后终于在css-loader的npm 官网找到了解决办法https://www.npmjs.com/package/css-loader#object

最后结果

{
  test: cssRegex,
  exclude: cssModuleRegex,
  use: getStyleLoaders({
    importLoaders: 1,
    modules: {
      mode:'local',
      localIdentName: '[name]__[local]--[hash:base64:5]',
    },
    sourceMap: isEnvProduction && shouldUseSourceMap,
  }),
  sideEffects: true,
},

5.优化:上面是把所有的.css文件都私有化了,但这并不是我们想要的,我们发现webpack.config.js里面默认有这么一段

{
  test: cssModuleRegex,   //正则表达式 /\.module\.css$/
  use: getStyleLoaders({
    importLoaders: 1,
    sourceMap: isEnvProduction && shouldUseSourceMap,
    modules: {
      getLocalIdent: getCSSModuleLocalIdent,
    },
  }),
}

也就是说让css-loader对.modules.css的代码进行模块化,而且我们发现这里根本不需要配置,

我们回到题目发现,react的项目只需要把.css文件换成.module.css就可以实现模块化

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值