将 css 文件注入到使用 HtmlWebpackPlugin 生成的 html 文件的头部

Injecting css file into head of html file generated using HtmlWebpackPlugin

我已经配置 babel-css-in-js plugin 在 webpack 运行 babel-loader 时将 css 文件构建到 ./app/bundle.css 中。我需要将此文件注入 html-webpack-plugin 生成的 HTML 文件中。我试过通过 css-loader 加载它,例如:

import './bundle.css';

const styles = cssInJs({
  red: {
    color: 'white',
    backgroundColor: 'red',
  },
});

const redClass = cx(styles.red);

function HelloWorld() {
  return (<h2 className={redClass}><LoremIpsum /></h2>);
}

但我收到错误:

client?cb1f:75 ENOTSUP: operation not supported on socket,  
uv_interface_addresses
 @ ./app/index.js 17:0-23

 ./bundle.css not found

这是我的 .babelrc:

["css-in-js", {
 "vendorPrefixes":true,
 "mediaMap":{
   "phone": "media only screen and (max-width: 768px)",
   "tablet":"media only screen and (max-width: 992px)",
   "desktop":"media only screen and (max-width: 1200px)"
 },
 "identifier": "cssInJs",
 "transformOptions":{
 "presets":["env"]
 },
   "bundleFile": "./app/bundle.css"
 }
]

html-webpack-plugin 使用 html-webpack-template 进行如下配置:

new HtmlWebpackPlugin({
  inject: false,
  mobile: true,
  appMountId: 'root',
  template,
}),

是否有任何其他机制可用于将 css file 注入生成的模板的头部?

项目源在github

我已使用 react-helmet 将外部样式表注入到生成的 html 页面中。首先,我从模块中删除了 webpack.config.js 中的 css-loaderimport ./bundle.css。我编辑了 .babelrc 以将 cssbundlePath 更改为 build 目录。

然后我补充说:

import Helmet from 'react-helmet';

const cssLink = {
  rel: 'stylesheet',
  type: 'text/css',
  href: './bundle.css',
};

我将以下内容添加到我的根组件中:

 <Helmet link={[cssLink]} />

组件现在看起来像:

function HelloWorld() {
  return (<h2 className={redClass}>
    <Helmet link={[cssLink]} />
    <LoremIpsum />
  </h2>);
}

看看.babelrc and index.js