Ind*_*the 6 express reactjs pm2
情境
我已经制作了React应用以及API的快速服务器,两者都是独立的。我尚未在Express应用中包含react文件夹。我期待使用PM2之前/之后的脚本来部署它,但是我很难真正实现我的想法。
目标
现在我的目录结构是
.
??? client
??? ecosystem.config.js
??? server
Run Code Online (Sandbox Code Playgroud)
我很困惑,因为我没有找到实现这一目标的任何资源。另外,我不确定pm2部署脚本是否可以实现此功能,或者我需要编写自己的bash脚本来完成某些工作,然后pm2仅启动服务器。
这只是我所做的,这似乎是完全错误的
生态系统.config.js
module.exports = {
apps : [{
name: 'API',
cwd: 'server',
script: 'server.js',
args: 'one two',
instances: 1,
autorestart: true,
watch: false,
max_memory_restart: '1G',
env_production: {
NODE_ENV: 'production'
}
}],
deploy : {
production : {
user : 'node',
// host : '212.83.163.1',
// ref : 'origin/master',
// repo : 'git@github.com:repo.git',
// path : '/var/www/production',
'post-deploy' : 'cd client && npm run build'
}
}
};
Run Code Online (Sandbox Code Playgroud)
由于您同时拥有服务器和客户端,因此我假设它是在 monorepo 中开发的。
出于这些目的,我建议使用纱线工作区,因为它本身满足您的第一个要求(客户端和服务器都安装 npm)。
要在1.0之前的yarn版本中启用工作区,请执行以启用它。
yarn config set workspaces-experimental true
Run Code Online (Sandbox Code Playgroud)
然后在服务器和客户端文件夹之外的文件夹(工作空间根目录)中添加package.json以及package.json您需要的任何其他密钥。还可以直接在此处安装常见依赖项,而不是在服务器和客户端内的 package.json 文件中单独安装它们。(不要忘记删除node_modules其中的文件夹,因为将在工作区根目录中创建一个新文件夹,并在纱线安装期间将所有依赖项安装在一起)。
{
"private": true,
"workspaces": ["server", "client"]
}
Run Code Online (Sandbox Code Playgroud)
将以下内容添加到您的服务器 index.js 文件中。
app.use(express.static(path.join(__dirname, 'public')));
app.get('*', (req,res) =>{
res.sendFile(path.join(__dirname+'/public/index.html'));
});
Run Code Online (Sandbox Code Playgroud)
并将 npm 脚本添加到package.json工作区根目录中。
{
...
"scripts": {
"start": "yarn --cwd client react-scripts build && mv ./client/build ./server/public && node ./server/index.js"
}
...
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
300 次 |
| 最近记录: |