我的目標是將CSS渲染到服務器端的樣式標記中,或者如何使用style-loader
插件在客戶端執行此操作。我知道這是不可能的,因爲style-loader
直接寫入DOM並且Node.js中不存在DOM。如何使用Webpack將樣式加載到React服務器端並返回樣式加載器客戶端?
目前我正在使用ExtractTextPlugin,但是如果我沒有將所有CSS編譯成一個大文件,當頁面加載時會錯過一些樣式,除非我在服務器上運行Webpack並且不編譯它顧左右而言他。
我有了這個代碼渲染頁面:
server.jsx
const renderedContent = renderToString(
<Provider store={store} history={history}>
<RoutingContext {...renderProps} />
</Provider>
)
const finalState = store.getState()
const renderedPage = renderFullPage(renderedContent, finalState)
渲染全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>
)
}
我是重要的納克全球的風格,當我需要他們在我的陣營模塊,像這樣:
import './../../assets/styl/flex-video'
而且我想改變我如何加載CSS把所有CSS成一個變種我可以遍歷和輸出<style>
標籤以同樣的方式style-loader
做它像這樣:
{typeof __production !== 'undefined' && __production === true && cssFiles.map((styles) => {
<style>{styles}</style>
})}
這是可能的的WebPack?有沒有像isomorphic-style-loader
這樣的插件能夠做到這一點?如果是這樣,我將如何修改我的代碼?