最近在使用 react 和 redux 建構一個 isomorphic javascript(universal)應用。
但是在實作 css modules 的時候,會碰上兩個問題:
server-side 的 node.js 無法 import *.css。
如果改成使用 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.jsrequire('css-modules-require-hook')({ generatescopedname: '[name]__[local]___[hash:base64:5]'});// ...
注意 generatescopedname 的命名格式,必須與 css-loader 的 localidentname 保持一致。