나는 react, react-router, express 및 webpack을 사용하여 동형 어플을 구축했다. 이제는 CSS 모듈을 사용하여 CSS를 가져 오려고합니다.React isomorphic app에서 webpack과 함께 CSS 모듈을 사용하는 방법은 무엇입니까?
index.jsx
에 import './index.css'
을 사용합니다. 클라이언트에서 정상적으로 작동하지만 서버 렌더링에서는 작동하지 않습니다. 오류는 Error: Cannot find module './index.css'
입니다.
부품/index.jsx
import React, {Component, PropTypes} from 'react';
import style from './index.css';
class App extends Component {
constructor(props, context) {
super(props, context);
}
render() {
return (
<div id="login">
// ...
</div>
);
}
};
export default App;
서버/라우터 /하는 index.js
webpack.config.dev.js
import url from 'url';
import express from 'express';
import swig from 'swig';
import React from 'react';
import {renderToString} from 'react-dom/server';
import {match, RouterContext} from 'react-router';
import routes from '../../client/routes/routes';
import DataWrapper from '../../client/container/DataWrapper';
import data from '../module/data';
const router = express.Router();
router.get('*', async(req, res) => {
match({
routes,
location: req.url
}, async(error, redirectLocation, props) => {
if (error) {
res.status(500).send(error.message);
} else if (redirectLocation) {
res.status(302).redirect(redirectLocation.pathname + redirectLocation.search);
} else if (props) {
let content = renderToString(
<DataWrapper data={data}><RouterContext {...props}/></DataWrapper>
);
let html = swig.renderFile('views/index.html', {
content,
env: process.env.NODE_ENV
});
res.status(200).send(html);
} else {
res.status(404).send('Not found');
}
});
});
export default router;
(웹팩-DEV-서버)
var webpack = require('webpack');
var config = require('./config');
module.exports = {
devtool: 'inline-source-map',
entry: [
'webpack-dev-server/client?http://localhost:' + config.webpackPort,
'webpack/hot/only-dev-server',
'./src/client/entry',
],
output: {
path: __dirname + '/public/js',
filename: 'app.js',
publicPath: 'http://localhost:' + config.webpackPort + '/public/js',
},
plugins: [
new webpack.HotModuleReplacementPlugin(),
new webpack.NoErrorsPlugin(),
new webpack.DefinePlugin({
"process.env": {
NODE_ENV: JSON.stringify('development')
}
})
],
resolve: {
extensions: ['', '.js', '.jsx', '.css']
},
module: {
loaders: [{
test: /\.jsx?$/,
loader: 'react-hot',
exclude: /node_modules/
}, {
test: /\.jsx?$/,
loader: 'babel-loader',
exclude: /node_modules/
}, {
test: /\.css$/,
loader: 'style-loader!css-loader?modules',
exclude: /node_modules/
}, {
test: /\.(png|woff|woff2|svg|ttf|eot)$/,
loader: 'url-loader',
exclude: /node_modules/
}]
}
}
Webpack의 경우 [Isomorphic CSS 스타일 로더] (https://github.com/kriasoft/isomorphic-style-loader)를 사용하여 서버 측 렌더링 중에 중요한 경로 CSS를 렌더링합니다. – HiDeo
@HiDeo 반응 라우터를 사용합니까? 어쩌면 나에게 데모를 보여줄 수 있니? 이 로더를 시도했지만 서버 측 코드를 처리하는 방법을 모릅니다. –
네, 예/예를 들어 [Isom Isomorphic Starterkit] (https://github.com/RickWong/react-isomorphic-starterkit)은'isomorphic-style-loader','react-router'와 함께 사용합니다. 서버 측 반응 렌더링. – HiDeo