windows pm2 start npm 报错 Created by npm, please don't edit manually.

windows 系统使用 pm2 start npm --name test -- run start 启动项目报错,使用 pm2 logs 可以看到报错信息 Created by npm, please don't edit manually.

详细报错信息如下:

1
2
3
4
5
6
7
11|test | C:\Users\Administrator\AppData\Roaming\nvm\v10.16.0\NPM.CMD:1
11|test | :: Created by npm, please don't edit manually.
11|test | ^
11|test |
11|test | SyntaxError: Unexpected token :
11|test | at Module._compile (internal/modules/cjs/loader.js:721:23)
11|test | at Object.Module._extensions..js (internal/modules/cjs/loader.js:787:10)

原因是 node 无法操作 cmd 控制台。参考github issue

解决办法

方法一:安装三方插件处理

  1. 安装依赖
1
npm install node-cmd --save
  1. 新建 startScript.js
startScript.js
1
2
const cmd=require('node-cmd');
cmd.run('npm start');
  1. 启动该脚本
1
pm2 start startScript.js

方法二:使用 pm2 配置文件启动项目

  1. 新建 ecosystem.config.js
ecosystem.config配置文档
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
module.exports = {
apps: [{
name: 'test',
// 启动执行的初始脚本
script: './node_modules/nuxt/bin/nuxt.js',
args: 'start',
// 日志格式
log_date_format: 'YYYY-MM-DD HH:mm Z',
log_file: './log/migu.stdlog.log',
error_file: './log/migu.stderr.log',
out_file: './log/migu.stdout.log',
pid_file: './log/pids/migu.pid',
// 在群集模式下,每个群集都有自己的日志文件。可以使用合并选项将所有日志收集到单个文件中:
// 'merge_logs': true,
// 运行实例的数目
// 'instances': 6,
min_uptime: 3000,
max_restarts: 30,
// 内存达到多少会自动restart
max_memory_restart: '950M',
// 定时启动,解决重启能解决的问题,表示每天0点1分重启
cron_restart: '1 0 * * *',
env: {
// 'COMMON_VARIABLE': 'true'
NODE_ENV: 'development',
},
env_production: {
NODE_ENV: 'production',
},
exec_interpreter: 'node',
exec_mode: 'fork',
// 自动重启
autorestart: true,
vizion: false,
}]
};
  1. 使用配置文件启动项目
1
pm2 start ecosystem.config.js --env production

以上两种处理办法,建议使用方法二,毕竟方法二可通过配置文件管理项目,而且也不依赖三方插件。

本文由 linx(544819896@qq.com) 创作,采用 CC BY 4.0 CN协议 进行许可。 可自由转载、引用,但需署名作者且注明文章出处。本文链接为: https://blog.jijian.link/2023-02-19/windows-pm2-start-npm-error/

如果您觉得文章不错,可以点击文章中的广告支持一下!