解決 Universal 架構的 CSS Modules 問題

本文介绍了解决React和Redux项目中CSS Modules在Server-side与Client-side不一致问题的方法,通过安装css-modules-require-hook及配置webpack来实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近在使用 ReactRedux 建構一個 Isomorphic JavaScript(Universal)應用。

但是在實作 CSS Modules 的時候,會碰上兩個問題:

  1. Server-side 的 Node.js 無法 import *.css

  2. 如果改成使用 process.env.IS_BROWSER 來判斷只在 Client-dide import,那又會碰到 Server-side 與 Client-side render 出來的 DOM 結果不一致的問題。

解決方式:

安裝 css-modules-require-hook 這個套件:

npm install css-modules-require-hook --save-dev

修改 webpack config 的 css-loader 設定:

// webpack.config.js
{
  // ...
  module: {
    loaders: [{
      test: /\.css$/,
      loader: 'style-loader!css-loader?modules&localIdentName=[name]__[local]___[hash:base64:5]!!postcss-loader'
    }]
  }
  // ...
}

在 Node.js 的 main file 加入 css-modules-require-hook:

// server.js
require('css-modules-require-hook')({
  generateScopedName: '[name]__[local]___[hash:base64:5]'
});
// ...

注意 generateScopedName 的命名格式,必須與 css-loader 的 localIdentName 保持一致。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值