【问题标题】:Configure how React app is started in production配置 React 应用在生产环境中的启动方式
【发布时间】:2020-04-18 00:05:20
【问题描述】:

create-react-appnpm 菜鸟在这里,我在部署到生产时遇到了一些麻烦。当我启动我的应用程序时,我想启动一个特定的 js 文件,并运行正常的react-scripts start。所以在我的package.json 中,我有以下内容。

"scripts": {
  "start": "node -r esm src/server.js & react-scripts start",
  ...
}

当我运行 npm start 时,它运行良好,两个脚本都在本地执行并且启动并运行。

我的粗略阅读似乎表明npm start 只是用于开发。在生产中,build/ 文件夹将被使用,并且......我无法弄清楚它是如何运行的。在本地测试,运行npm run build 后,会创建build/ 文件夹。然后运行serve -s build,执行了一些东西,但这不是我的npm start 脚本。看起来它只是react-scripts start。尝试部署到 Firebase 和 Netlify 等多个真实生产服务器的行为方式相同。

那么,生产构建究竟是如何开始的呢?以及如何将其配置为像我的开发版本一样。

我觉得我一定是误解了一些基本的东西,因为我在网上找不到任何解释,但我们将不胜感激。

如果您对我为什么会有这种奇怪的设置感兴趣,我正在尝试将boardgame.io 与多人服务器一起部署。

【问题讨论】:

  • 当您运行npm run build 时,您的所有代码都会打包到一个静态站点中。这就是构建文件夹中的内容。因此,如果您只是进入构建并打开 index.html,该站点应该会按预期显示。 “使服务器运行”只是意味着提供 index.html 文件。

标签: reactjs npm create-react-app


【解决方案1】:

使用npm start 的原因是您可以即时启动本地Web 服务器并与nodemon 和其他好东西配对,可以轻松查看对源代码的更改,就像它在生产中一样。

npm build 将源代码转换为适合生产的轻量级延迟加载包。构建完成后,您可以使用 Web 服务器托管 build/index.html 并从那里访问该站点。您使用什么来托管它取决于您(最常见的是nginx,但您可以使用apachenode 之类的东西,就像您在serve -s build 中提到的那样)。

【讨论】:

  • 啊,好吧,我想我明白它现在是如何正常工作的了。是不是因为在我的package.json 中,mainsrc/index.js,该文件运行,它在index.html 中的"root" 元素上呈现其组件?因此,如果我还想运行src/server.js,那么简单的方法是将main 设置为src/server.js 的单独项目?但是我的server.js 需要在同一个项目中找到代码,所以我试图避免这种情况
  • 构建会处理所有客户端的东西,你只需要托管目录。由于您使用的是 MERN 堆栈,因此大多数人将拥有两个独立的项目,客户端和服务器。对于较小的项目,我个人不会真正担心这一点。在生产环境中,除了托管构建目录外,您还需要 node 一直运行src/server.js(如果崩溃则重新启动)。你可以使用pm2 之类的东西来做到这一点。
猜你喜欢
  • 2013-03-06
  • 2011-10-25
  • 1970-01-01
  • 2018-09-26
  • 1970-01-01
  • 2019-08-09
  • 2013-01-22
  • 2015-05-30
  • 2014-06-02
相关资源
最近更新 更多