linux 将React应用程序作为后台进程运行

fhity93d  于 2023-06-21  发布在  Linux
关注(0)|答案(2)|浏览(198)

我对部署前端代码完全陌生,因此这个问题。我有一个React应用程序,我需要作为后台进程运行,但我对如何做到这一点有点困惑。我运行一个npm脚本

npm run build

在服务器上构建、缩小和提供项目。构建过程的相关代码如下。

"prebuild": "npm-run-all clean-dist test lint build:html",
"build": "babel-node tools/build.js",
"postbuild": "babel-node tools/distServer.js"

这是distServer.js中的代码

import express from 'express';
import path from 'path';
import open from 'open';
import compression from 'compression';

const port = 3000;
const app = express();

app.use(compression());
app.use(express.static('dist'));

app.get('*', function(req, res){
  res.sendFile(path.join(__dirname, '../dist/index.html'));
});

app.listen(port, function(err){
  if(err){
    console.log(err);
  }else{
    open(`http://localhost:${port}`);
  }
});

这工作和项目运行,但当我关闭我的终端项目停止。构建过程创建三个文件,

index.html
index.js
styles.css

现在,如果我导航到index.html并在浏览器中打开它,但自然地,什么也没有显示。所以我假设我必须把它作为一个节点进程来运行。如何在生产服务器上执行此操作,并将其作为后台进程运行,以便即使退出终端,应用程序也能继续运行。我已经检查了这个问题,How to make a node.js application run permanently?
但这有一个JavaScript文件作为入口点,在我的情况下,它是一个html文件。我不知道如何修改脚本以将前端应用程序永久地作为后台进程运行。任何帮助感激不尽。

cld4siwp

cld4siwp1#

您的JavaScript文件(distServer.js您的入口点-它是您运行以启动服务器的文件。您的HTML文件(index.html)仅作为对请求的响应。
babel-node适合开发,但不适合生产。您可以将JavaScript文件预编译为vanilla Javascript,然后使用foreverpm2,如question you already linked to中所述,以便即使在关闭终端后也能保持服务器运行。
如何组织源文件和编译文件取决于你,但这里有一种方法(引用一个使用Babel的Node服务器示例文档):

准备投入生产使用

所以我们用babel-node来做了一点手脚。虽然这是伟大的得到一些东西去。在生产中使用它不是一个好主意。
我们应该预编译你的文件,现在就开始吧。
首先,让我们将服务器index.js文件移动到lib/index.js

$ mv index.js lib/index.js

并更新我们的npm start脚本以反映位置更改。

"scripts": {
-   "start": "nodemon index.js --exec babel-node --presets es2015,stage-2"
+   "start": "nodemon lib/index.js --exec babel-node --presets es2015,stage-2"
  }

接下来,我们添加两个新任务npm run buildnpm run serve

"scripts": {
    "start": "nodemon lib/index.js --exec babel-node --presets es2015,stage-2",
+   "build": "babel lib -d dist --presets es2015,stage-2",
+   "serve": "node dist/index.js"
  }

现在,我们可以使用npm run build预编译我们的资产,并使用npm run serve在生产环境中启动我们的服务器。

$ npm run build
$ npm run serve

这意味着我们可以快速重启服务器,而无需等待babel重新编译文件。
哦,不要忘记将dist添加到.gitignore文件中。

$ touch .gitignore

dist

这将确保我们不会意外地将构建的文件提交到git。

yb3bgrhw

yb3bgrhw2#

尝试运行“npm install -g pm2”,然后运行“pm2 start npm --(your app name)-- start”
即使关闭终端,react应用程序也会在后台运行。

相关问题