在npm run build
项目上运行react-create-app
命令会在所有文件内(如地图文件中)创建一个构建文件夹和一些默认路径:
{"version":3,"sources":["../static/js/main.500cb0d9.js" ...
我可以更改构建文件夹中的所有路径以匹配我的BE,例如
{"version":3,"sources":["mywebsite/web/static/js/main.500cb0d9.js" ...
package.json:
{
"name": "reactTest",
"version": "0.1.0",
"private": true,
"dependencies": {
"jquery": "^3.3.1",
"moment": "^2.22.1",
"react": "^16.4.1",
"react-datepicker": "^1.5.0",
"react-dom": "^16.4.1",
"react-month-picker": "^1.3.7",
"react-scripts": "1.1.4"
},
"scripts": {
"start": "react-scripts start",
"build": "react-scripts build",
"test": "react-scripts test --env=jsdom",
"eject": "react-scripts eject"
}
}
答案 0 :(得分:6)
您可以使用以下两种方法之一设置用于在生产中服务React应用的根路径:
1。通过在您的 package.json 文件
中设置主页属性第5行通知:
{
"name": "reactTest",
"version": "0.1.0",
"private": true,
"homepage": "mywebsite/web",
"dependencies": {
"jquery": "^3.3.1",
"moment": "^2.22.1",
"react": "^16.4.1",
"react-datepicker": "^1.5.0",
"react-dom": "^16.4.1",
"react-month-picker": "^1.3.7",
"react-scripts": "1.1.4"
},
"scripts": {
"start": "react-scripts start",
"build": "react-scripts build",
"test": "react-scripts test --env=jsdom",
"eject": "react-scripts eject"
}
}
2。使用PUBLIC_URL环境变量
运行 build 作业时,在其前面添加env var,如下所示:
PUBLIC_URL=mywebsite/web npm run build
它做什么?
这些方法将不更改源映射文件中的路径,这些路径始终是相对的,但将用于使您能够将React应用程序部署到Web服务器选择绝对路径。
根据您设置的值,这将导致所生成的 index.html 中包含JavaScript和CSS包的路径是绝对的:
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1,shrink-to-fit=no">
<meta name="theme-color" content="#000000">
<link rel="manifest" href="mywebsite/web/manifest.json">
<link rel="shortcut icon" href="mywebsite/web/favicon.ico">
<title>React App</title>
<link href="mywebsite/web/static/css/main.c17080f1.css" rel="stylesheet">
</head>
<body>
<noscript>You need to enable JavaScript to run this app.</noscript>
<div id="root"></div>
<script type="text/javascript" src="mywebsite/web/static/js/main.dbfd0e89.js"></script>
</body>
</html>
答案 1 :(得分:1)
检查此帖子的永久解决方案,我相信这是最好的 方便的方法:
https://github.com/facebook/create-react-app/issues/2575#issuecomment-452295290
为方便起见,我在此处复制并粘贴:
在项目根目录下创建一个名为.env的文件(在同一位置 package.json位于)。在这个档案中写下这个( 网址):
PUBLIC_URL=https://dsomething.cloudfront.net
像往常一样构建项目(npm run build),这也会生成 index.html,其中:
<script type="text/javascript" src="https://dsomething.cloudfront.net/static/js/main.ec7f8972.js">
答案 2 :(得分:0)
随着@patrick hund的跟进,文档位置已移动,并且似乎某些步骤已更改。您可以在此处阅读并进行相应的解释: advanced deployment in CRA。
在此页面中,您可以找到很多有用的信息,这些信息可以为您的下一个项目提供各种想法。阅读页面后,这是我最喜欢的小技巧:
如果您不使用HTML5 pushState历史记录API或完全不使用客户端路由,则无需指定将从其提供应用程序的URL。相反,您可以将其放在package.json中:
"homepage": ".",
这将确保所有资产路径都相对于index.html。然后,您可以将应用程序从http://mywebsite.com移至http://mywebsite.com/relativepath甚至是http://mywebsite.com/relative/path,而无需重新构建它。