如何解决 pm2 中的“SyntaxError: Invalid regular expression”

问题描述

我用 pm2 安装 node.js,一切都安装得很好,但是当我尝试执行 pm2 monit 时给我这个错误

$ pm2 monit
/home/node/.nvm/versions/node/v8.11.3/lib/node_modules/pm2/node_modules/fast-printf/dist/src/tokenize.js:4
const TokenRule = /(?:%(?<flag>([+0-]|-\+))?(?<width>\d+)?(?<position>\d+\$)?(?<precision>\.\d+)?(?<conversion>[%BCESb-iosux]))|(\\%)/g;
                  ^

SyntaxError: Invalid regular expression: /(?:%(?<flag>([+0-]|-\+))?(?<width>\d+)?(?<position>\d+\$)?(?<precision>\.\d+)?(?<conversion>[%BCESb-iosux]))|(\\%)/: Invalid group
    at Object.<anonymous> (/home/node/.nvm/versions/node/v8.11.3/lib/node_modules/pm2/node_modules/fast-printf/dist/src/tokenize.js:4:19)
    at Module._compile (module.js:652:30)
    at Object.Module._extensions..js (module.js:663:10)
    at Module.load (module.js:565:32)
    at tryModuleLoad (module.js:505:12)
    at Function.Module._load (module.js:497:3)
    at Module.require (module.js:596:17)
    at require (internal/module.js:11:18)
    at Object.<anonymous> (/home/node/.nvm/versions/node/v8.11.3/lib/node_modules/pm2/node_modules/fast-printf/dist/src/createPrintf.js:5:20)
    at Module._compile (module.js:652:30)

我尝试了服务器 nodejs 版本,但总是给我这个错误

解决方法

如果您将正则表达式粘贴到正则表达式沙箱中,如下所示:

https://regex101.com/r/GkwWH2/1

您会看到它没有显示任何语法错误。

那会让我怀疑您正在运行 Node JS 的后级版本。事实上,如果您查看堆栈跟踪,您会发现您正在运行 Node 8.11.3

at Object.<anonymous> (/home/node/.nvm/versions/node/v8.11.3/lib/node_modules/pm2/node_modules/fas

该正则表达式正在使用直到 Node v10.* 才出现在 Node.js 中的功能(例如命名捕获组)。

我建议您更新到最新的 LTS 版本的 Node,版本 14.*:从您的堆栈跟踪来看,您似乎正在使用 NVM,所以这应该是一个简单的问题

sudo nvm install lts/fermium

应该这样做。