提问者:小点点

如何将CreateReact应用程序作为更大网站的子目录提供服务?


我有一个相对基本的问题,关于在使用React创建应用程序时如何构造javascript代码。

我想在多页网站中嵌入一个单页应用程序。例如,我可能有一个主页、一个关于页面、一个注册页面等,所有这些都由运行Express的节点服务器提供服务。它们与反应无关。我还使用passport,它提供自己的页面进行身份验证(本地登录、社交登录、注销等)此外,我在服务器上的/API/上运行了一个GraphQLAPI。

我还想在同一个网站上,在/embed/*上提供一个react应用程序(react应用程序的基本url是https://mywebsite.com/embed/,并且有许多子页面由react路由器处理)。

如何在开发和生产中为使用create-react-app创建的React应用提供服务,作为更大网站的子目录?(Cookies应该在反应应用程序和主网站之间共享。)

我已经成功地使用了create-react-app中的代理选项来连接到反应应用(在3000端口上运行)的API(在3001端口上运行)。然而,代理似乎无法转发用户在浏览器中输入的网址。(例如:如果我访问localhost:3000/api/使用获取在我的代码中,它转发到localhost:3001/api/所需的。但是,如果我在地址栏中输入相同的网址,它就不会被重定向。相反,我的反应应用程序加载。这是有道理的,但不是我想要的行为。)


共1个答案

匿名用户

你们不需要做任何关于包装的事情。json和其他东西。只要你有任何资产,如图像,字体。。。它们应该包含在包含bundle的build文件夹中(如果使用dist而不是build,则应包含在dist文件夹中)。js。

通过使用create react app,您将在生成文件夹中拥有以下文件:

  • 资产清单。json

你所有的代码都会捆绑在一起,你不需要package.json,...

但如果您不使用CreatReact应用程序,则情况会有所不同,您需要包括您的捆绑包。在你的索引中。html

但是有了CRA,你不会一切都是自动的,你也不需要做额外的事情。

此链接可帮助您在生产中找到路由:创建React应用程序:找不到路由

在服务器中,您可以为索引提供服务。如下所示的html:

let root = path.join(__dirname, 'client', 'build');
app.use(express.static(root));
app.use(function(req, res, next) {
if (req.method === 'GET' && req.accepts('html') && !req.is('json') && 
 !req.path.includes('.')) {
   res.sendFile('index.html', { root });
 } else next();
 });

希望这对你有帮助