我对部署前端代码完全陌生,因此这个问题。我有一个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文件。我不知道如何修改脚本以将前端应用程序永久地作为后台进程运行。任何帮助感激不尽。
2条答案
按热度按时间cld4siwp1#
您的JavaScript文件(
distServer.js
)是您的入口点-它是您运行以启动服务器的文件。您的HTML文件(index.html
)仅作为对请求的响应。babel-node
适合开发,但不适合生产。您可以将JavaScript文件预编译为vanilla Javascript,然后使用forever或pm2,如question you already linked to中所述,以便即使在关闭终端后也能保持服务器运行。如何组织源文件和编译文件取决于你,但这里有一种方法(引用一个使用Babel的Node服务器示例文档):
准备投入生产使用
所以我们用
babel-node
来做了一点手脚。虽然这是伟大的得到一些东西去。在生产中使用它不是一个好主意。我们应该预编译你的文件,现在就开始吧。
首先,让我们将服务器
index.js
文件移动到lib/index.js
。并更新我们的
npm start
脚本以反映位置更改。接下来,我们添加两个新任务
npm run build
和npm run serve
。现在,我们可以使用
npm run build
预编译我们的资产,并使用npm run serve
在生产环境中启动我们的服务器。这意味着我们可以快速重启服务器,而无需等待
babel
重新编译文件。哦,不要忘记将
dist
添加到.gitignore
文件中。这将确保我们不会意外地将构建的文件提交到git。
yb3bgrhw2#
尝试运行“npm install -g pm2”,然后运行“pm2 start npm --(your app name)-- start”
即使关闭终端,react应用程序也会在后台运行。