PM2를 Windows에서 사용할 때 문제를 회피하는 방법

Node.js에서 Process Management를 위해 널리 사용하는 PM2가 Windows에서는 제대로 동작하지 않아요.
구동하면 이런 에러가 나오거든요.

C:\PROGRAM FILES\NODEJS\NPM.CMD:1
(function (exports, require, module, __filename, __dirname) { :: Created by npm, please don't edit manually.
                                                              ^
SyntaxError: Unexpected token :
    at createScript (vm.js:56:10)
    at Object.runInThisContext (vm.js:97:10)
    at Module._compile (module.js:542:28)
    at Object.Module._extensions..js (module.js:579:10)
    at Module.load (module.js:487:32)
    at tryModuleLoad (module.js:446:12)
    at Function.Module._load (module.js:438:3)
    at Object.<anonymous> (C:\Users\admin\AppData\Roaming\npm\node_modules\pm2\lib\ProcessContainerFork.js:53:21)
    at Module._compile (module.js:570:32)
    at Object.Module._extensions..js (module.js:579:10)

관련이슈


그래서 회피 방법이란게 이런 코드를 작성해서 돌려줘야 합니다.

// startscript.js
const exec = require('child_process').exec;
const path = require('path');

const client = exec('npm run test:server', {
  windowsHide: true,
  cwd: path.join(__dirname, './'),
});

client.stdout.pipe(process.stdout);
client.stderr.pipe(process.stderr);

구동은 이렇게 하고요.

// start
pm2 start ./startscript.js
// stop
pm2 stop ./startscript.js

문제가 pm2의 ecosystem.json 파일도 못 사용해서 package.json의 scripts에서 cross-env를 사용하거나 너무 길어지면 better-npm-run 같은 모듈을 사용해야 합니다.

제가 까먹지 않기 위해 적어둡니다 :sweat_smile:

2개의 좋아요

윈도우만 특이한거죠. 리눅스나 Mac은 POSIX라는 같은 스펙으로 돌아가기 때문에 문제가 없습니다.
윈도우에서 .NET을 제외한 다른 언어를 사용해 개발하는건 다양한 문제를 겪기 때문에 썩 좋은 방법은 아닙니다.