使用 Create-React-App,是否可以像使用 grunt/gulp 一样在构建过程中将 Inject/replace/append 代码写入 index.html 文件?
Using Create-React-App, is there anyway to Inject/replace/append code into the index.html file during the build process like you can with grunt/gulp?
Create-react-app 在 build 文件夹中创建一个 index.html 文件,我已经巧妙地将其重命名为 index.aspx (in package.json - "build": "react-scripts build && mv build/index.html build/index.aspx",)
因为我需要应用程序 运行 在我们服务器上的模板中 - 它确实如此。但是,我目前必须在新 index.aspx 文件中的 <!doctype html>
之前传递 <%@ Page language="c#" CodeBehind="index_fw2.aspx.cs" AutoEventWireup="false" Inherits="IMod.Web.V2.Index" %>
,以便模板在我们的服务器上呈现。
我是否可以让 create-react-app 将它注入到新重命名的 index.aspx 文件中,甚至在构建过程中从 index.html 重命名之前?我到处寻找这方面的参考资料。
TIA!
您可以使用 webpack 将任何您想要的内容插入到您的 html 文件中。在当前示例中,我使用 html-webpack-plugin.
webpack.config.js
const HtmlWebpackPlugin = require('html-webpack-plugin');
module.exports = {
....
plugins: [
new HtmlWebpackPlugin({
template: './src/index.html', // Path to your index file
some_variable: '<%@ Page language="c#" CodeBehind="index_fw2.aspx.cs" AutoEventWireup="false" Inherits="IMod.Web.V2.Index" %>', //
}),
],
};
然后在您的 index.html 文件中插入一个模板变量:
<%= htmlWebpackPlugin.options.some_variable %>
<!DOCTYPE html>
<html>
....
在您 运行 构建脚本后,webpack 将用配置文件中定义的模板变量替换您的模板变量。
好的,所以我想通了。 Create-React-App 安装它自己使用的 Webpack 版本——也就是说,它已经有一个 webpack.config.js 文件了在 node_modules/react-script/config/webpack.config.js
中使用
所以我找到了这个文件并搜索了 HtmlWebpackPlugin 并在大约第 585 行找到了它:
plugins: [
// Generates an `index.html` file with the <script> injected.
new HtmlWebpackPlugin(
Object.assign(
{},
{
inject: true,
template: paths.appHtml,
// Here I added my defined variable name aspxPrefix that is located in my template to be replaced - <%= htmlWebpackPlugin.options.aspxPrefix %>
aspxPrefix: '<%@ Page language="c#" CodeBehind="index_fw2.aspx.cs" AutoEventWireup="false" Inherits="IMod.Web.V2.Index" %>',
// Then added the location and name I wanted the modified file to have here - in this case, I want it located in the build folder and renamed with .aspx
filename: paths.appBuild+'/index.aspx'
},
伙计,我希望这对某人有所帮助,因为我一天浪费了大约 3 个小时。并感谢@Satif 给我解决方案。您的解决方案有效,但我只需要知道将其放置在 Create-React-App 生成环境中的什么位置。
以下解决方案对我有用。我们不需要为此使用 craco。只需使用 env-cmd
创建一个环境变量并将其放入您的 HTML 代码中。
在环境文件中:
REACT_APP_ASP_NET=<%@ Page language="c#" CodeBehind="index_fw2.aspx.cs" AutoEventWireup="false" Inherits="IMod.Web.V2.Index" %>
在 HTML 页面中(只需将其放在页面顶部):
%REACT_APP_ASP_NET%
Create-react-app 在 build 文件夹中创建一个 index.html 文件,我已经巧妙地将其重命名为 index.aspx (in package.json - "build": "react-scripts build && mv build/index.html build/index.aspx",)
因为我需要应用程序 运行 在我们服务器上的模板中 - 它确实如此。但是,我目前必须在新 index.aspx 文件中的 <!doctype html>
之前传递 <%@ Page language="c#" CodeBehind="index_fw2.aspx.cs" AutoEventWireup="false" Inherits="IMod.Web.V2.Index" %>
,以便模板在我们的服务器上呈现。
我是否可以让 create-react-app 将它注入到新重命名的 index.aspx 文件中,甚至在构建过程中从 index.html 重命名之前?我到处寻找这方面的参考资料。
TIA!
您可以使用 webpack 将任何您想要的内容插入到您的 html 文件中。在当前示例中,我使用 html-webpack-plugin.
webpack.config.js
const HtmlWebpackPlugin = require('html-webpack-plugin');
module.exports = {
....
plugins: [
new HtmlWebpackPlugin({
template: './src/index.html', // Path to your index file
some_variable: '<%@ Page language="c#" CodeBehind="index_fw2.aspx.cs" AutoEventWireup="false" Inherits="IMod.Web.V2.Index" %>', //
}),
],
};
然后在您的 index.html 文件中插入一个模板变量:
<%= htmlWebpackPlugin.options.some_variable %>
<!DOCTYPE html>
<html>
....
在您 运行 构建脚本后,webpack 将用配置文件中定义的模板变量替换您的模板变量。
好的,所以我想通了。 Create-React-App 安装它自己使用的 Webpack 版本——也就是说,它已经有一个 webpack.config.js 文件了在 node_modules/react-script/config/webpack.config.js
所以我找到了这个文件并搜索了 HtmlWebpackPlugin 并在大约第 585 行找到了它:
plugins: [
// Generates an `index.html` file with the <script> injected.
new HtmlWebpackPlugin(
Object.assign(
{},
{
inject: true,
template: paths.appHtml,
// Here I added my defined variable name aspxPrefix that is located in my template to be replaced - <%= htmlWebpackPlugin.options.aspxPrefix %>
aspxPrefix: '<%@ Page language="c#" CodeBehind="index_fw2.aspx.cs" AutoEventWireup="false" Inherits="IMod.Web.V2.Index" %>',
// Then added the location and name I wanted the modified file to have here - in this case, I want it located in the build folder and renamed with .aspx
filename: paths.appBuild+'/index.aspx'
},
伙计,我希望这对某人有所帮助,因为我一天浪费了大约 3 个小时。并感谢@Satif 给我解决方案。您的解决方案有效,但我只需要知道将其放置在 Create-React-App 生成环境中的什么位置。
以下解决方案对我有用。我们不需要为此使用 craco。只需使用 env-cmd
创建一个环境变量并将其放入您的 HTML 代码中。
在环境文件中:
REACT_APP_ASP_NET=<%@ Page language="c#" CodeBehind="index_fw2.aspx.cs" AutoEventWireup="false" Inherits="IMod.Web.V2.Index" %>
在 HTML 页面中(只需将其放在页面顶部):
%REACT_APP_ASP_NET%