开发环境mac、生产环境ubuntu20.04
设置环境变量
// 开发环境(mac 终端)
export NODE_ENV="development"
// 生产环境(ubuntu)
set NODE_ENV="production"
在express中使用的pm2配置文件。
文件名:ecosystem.config.js
module.exports = {
apps : [{
name : "gnv",
script : "./app.js",
// 开启的进程数(服务器有几核就填数字几)
instances:1,
// 自动重启
autorestart:true,
// 监听变化自动重启
watch:true,
// 那些文件变化时不重启
ignore_watch:[
"node_modules",
"logs"
],
// (日志路径:根目录下的logs文件夹,根据进程数会生成0、1、2···的log文件)
// 错误日志
"error_file":"./logs/app-err.log",
// 输出日志
"out_file":"./logs/app-out.log",
"log_date_format":'YYYY-MM-DD HH:mm:ss',
// 达到最大内存重启
max_memory_restart:'2G',
env:{
NODE_ENV:'development'
},
env_production:{
NODE_ENV:'production'
}
}],
}
- npm中的scripts写成这样,在本地运行npm run pm2, 在服务器运行npm run pm2prod。
- 就可以使用npm通过pm2的配置文件来运行了,省时省力。
- 跟在命令后的--env 以便于process.env.NODE_ENV的使用!
- (开发环境我觉得还是nodemon好用- -!)
"scripts": {
"pm2prod": "pm2 start ecosystem.config.js --env production",
"pm2": "pm2 start ecosystem.config.js --env development"
}
pm2 一些简单操作
// 查看进程
pm2 list
// 停止一个进程
pm2 stop <name>
// 删除一个进程
pm2 delete <name>
// 重启进程
pm2 reload <name>
在项目启动的过程中可能会发生如下错误
const utf8Encoder = new TextEncoder();
^
ReferenceError: TextEncoder is not defined
那么在安装好的node_modules中找到“node_modules\whatwg-url\lib\encoding.js”,将其所有代码修改为以下。
"use strict";
var util= require('util');
const utf8Encoder = new util.TextEncoder();
const utf8Decoder = new util.TextEncoder("utf-8", { ignoreBOM: true });
function utf8Encode(string) {
return utf8Encoder.encode(string);
}
function utf8DecodeWithoutBOM(bytes) {
return utf8Decoder.decode(bytes);
}
module.exports = {
utf8Encode,
utf8DecodeWithoutBOM
};