style-loader
私の目標は、CSS をサーバー側と同様に、またはプラグインがクライアント側で行う方法とまったく同じスタイル タグにレンダリングすることです。style-loader
DOM に直接書き込み、DOM が Node.js に存在しないため、これが不可能であることはわかっています。
現在、私は ExtractTextPlugin を使用していますが、すべての CSS を 1 つの大きなファイルにコンパイルしないと、サーバーで Webpack を実行して完全にコンパイルしない限り、ページの読み込み時にいくつかのスタイルが失われます。
ページをレンダリングするこのコードがあります:
サーバー.jsx
const renderedContent = renderToString(
<Provider store={store} history={history}>
<RoutingContext {...renderProps} />
</Provider>
)
const finalState = store.getState()
const renderedPage = renderFullPage(renderedContent, finalState)
render-full-page.jsx
module.exports = function renderFullPage(renderedContent = undefined, state = {}) {
return '<!DOCTYPE html>' + renderToStaticMarkup(
<html lang="en">
<head>
<meta charSet="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
{typeof __production !== 'undefined' && __production === true && <link id="css" rel="stylesheet" href="/main.css" />}
</head>
<body>
<div id="root"><div dangerouslySetInnerHTML={{__html: renderedContent}}></div></div>
<script dangerouslySetInnerHTML={{__html: 'window.__INITIAL_STATE__ =' + JSON.stringify(state)}} />
<script src="/bundle.js"></script>
</body>
</html>
)
}
次のように、React モジュールで必要なときにスタイルをグローバルにインポートしています。
import './../../assets/styl/flex-video'
そして、CSS のロード方法を変更して、すべての CSS を var に入れ、ループして<style>
タグを同じように出力できるようにしたいと思いますstyle-loader
。
{typeof __production !== 'undefined' && __production === true && cssFiles.map((styles) => {
<style>{styles}</style>
})}
これはWebpackで可能ですか? これを行うことができるようなプラグインはありisomorphic-style-loader
ますか? もしそうなら、どのようにコードを変更しますか?