我想构建一个 React 应用程序,并将静态 css 和 js 文件有效地嵌入到index.html 中,当我调用yarn build
.
我显然可以破解输出并用内联版本替换<script src"...
和<link href="/static/css/...
标签,但希望有一个更优雅的解决方案。
我想构建一个 React 应用程序,并将静态 css 和 js 文件有效地嵌入到index.html 中,当我调用yarn build
.
我显然可以破解输出并用内联版本替换<script src"...
和<link href="/static/css/...
标签,但希望有一个更优雅的解决方案。
我让它工作了。供将来参考(使用 react 16.7.0 & yarn 1.10.1)...
创建一个react应用程序:
npx create-react-app my-app
cd my-app
yarn build
都好?酷,运行eject
以便您可以访问 webpack 配置:
yarn eject
rm -rf build node_modules
yarn install
yarn build
添加此项目并更新 webpack:
yarn add html-webpack-plugin@4.0.0-beta.4
yarn add html-webpack-inline-source-plugin@1.0.0-beta.2
编辑config/webpack.config.js
:
const HtmlWebpackPlugin = require('html-webpack-plugin');
const HtmlWebpackInlineSourcePlugin = require('html-webpack-inline-source-plugin'); <--- add this
...
plugins: [
new HtmlWebpackPlugin(
Object.assign(
...
isEnvProduction
? {
inlineSource: '.(js|css)$', <-- add this
minify: {
...
),
...
isEnvProduction &&
shouldInlineRuntimeChunk &&
new HtmlWebpackInlineSourcePlugin(HtmlWebpackPlugin), <--- add this
new InlineChunkHtmlPlugin(HtmlWebpackPlugin, [/runtime~.+[.]js/]),
...
运行rm -rf build && yarn build && serve -s build
-index.html
您加载的现在应该包含内联的所有 js 和 css 内容。请注意,静态文件仍然在构建目录中创建,但页面不使用它们。
为此目的创建了一个 Webpack 插件:
https://www.npmjs.com/package/html-webpack-inline-source-plugin
正如 README 指定的,这必须与 html-webpack-plugin 一起使用,并且您必须指定inlineSource
传入的:
plugins: [
new HtmlWebpackPlugin({
inlineSource: '.(js|css)$' // embed all javascript and css inline
}),
new HtmlWebpackInlineSourcePlugin()
]
以前的答案不起作用,因为html-webpack-inline-source-plugin
作者不再支持,取而代之的是官方插件html-inline-script-webpack-plugin
和html-inline-css-webpack-plugin
. 以下方法适用于截至 2021 年 10 月的最新 React 17。步骤:
创建一个 React 应用
create-react-app my-app
cd my-app
yarn
yarn start
确保它正常工作,您对输出感到满意。然后,弹出你的配置(我认为这可以在不弹出配置的情况下完成,但我懒得去查找如何配置 CRA)
yarn eject
rm -rf build node_modules
yarn
yarn build
然后,添加 Webpack 插件(假设您想要在此处嵌入 CSS 和脚本,如果您只想要另一个,只需删除一个)
yarn add html-inline-css-webpack-plugin -D
yarn add html-inline-script-webpack-plugin -D
最后,将这些添加到 Webpack 配置中config/webpack.config.js
。首先在文件顶部声明它们:
const HTMLInlineCSSWebpackPlugin = require('html-inline-css-webpack-plugin').default;
const HtmlInlineScriptPlugin = require('html-inline-script-webpack-plugin');
然后将它们添加到plugins: [...]
集合中。new InlineChunkHtmlPlugin
在此之后搜索并添加它们:
isEnvProduction &&
shouldInlineRuntimeChunk &&
new HTMLInlineCSSWebpackPlugin(),
isEnvProduction &&
shouldInlineRuntimeChunk &&
new HtmlInlineScriptPlugin(),
注意:包含isEnvProduction
/shouldInlineRuntimeChunk
检查很重要!如果你跳过这些,当你运行yarn start
. 您只想在生产模式下嵌入脚本,而不是在开发过程中。
现在,如果你运行,yarn build
你会发现所有的 CSS 和 JS 嵌入在build/index.html
. 如果您运行yarn start
它,它将启动一个您可以在其中进行开发的热重载开发环境。