style-loader
我的目标是将 CSS 渲染到服务器端的样式标签中,或者与插件在客户端的操作方式完全相同。我知道这是不可能style-loader
的,因为直接写入 DOM 并且 Node.js 中不存在 DOM。
目前我正在使用 ExtractTextPlugin,但是如果我没有将所有 CSS 编译到一个大文件中,那么当页面加载时它会丢失一些样式,除非我在服务器上运行 Webpack 而不是直接编译它。
我有这个代码呈现页面:
服务器.jsx
const renderedContent = renderToString(
<Provider store={store} history={history}>
<RoutingContext {...renderProps} />
</Provider>
)
const finalState = store.getState()
const renderedPage = renderFullPage(renderedContent, finalState)
呈现-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
能够做到这一点?如果是这样,我将如何修改我的代码?