Closed vulcan9 closed 6 years ago
한글경로에서 실행중일때 문제 현상이 재현됩니다. 원인 파악 결과 Node 에서 child_process.fork 메서드에서 한글 경로를 실행하지 않는것 같습니다. Node 버그라고 생각됩니다.
NodeJS 이슈에 일단 올렸습니다. 응답이 올동안 다른 이슈를 먼저 처리합니다. 오랫동안 응답이 없을 경우 별도의 실행파일을 만들어 spwan 메서드로 처리할 계획입니다.
nodeJS (#19888) 이슈에 답변을 보니 nodeJS 쪽 버그는 아닌듯 합니다. NwJS 이슈 게시판에서 검색해보니 fork 옵션으로 실행하는 방법이 있는데 이방법으로 해결할 수 있을것 같습니다.
var fork = require("child_process").fork;
var worker = fork("worker.js", {execPath:'node.exe'});
핵심은 execPath
옵션에 node.exe
값을 전달하는 것인데 아마도 node가 설치되어져 있어야만 동작할것 같은데 테스트 해보아야 할 것 같습니다.
역시 이 방법은 로컬에 node.exe
가 설치되어져 있을때만 가능한 방법으로 사용하기에 적절하지 않네요
다음 방법으로 동작하는걸 확인했습니다.
var fork = require("child_process").fork;
var worker = fork("worker.js", {execPath:'nw/nw.exe'});
execPath
값으로 nw.exe
위치를 넘겨주니 동작합니다.
결국 spwan
+socket
통신으로 구현하는 방법과 원리는 같으므로 fork
메서드로 퍼포먼스 이점은 거의 없을것 같고, 단지 구현이 간단해 지는 이점이 있다고 생각해야 할것 같습니다.
위 방법도 jik-ji 에서는 동작하지 않습니다. (정확히는 zip으로 패키징된 버전에서는 동작하지 않습니다.)
이유는 아마도 jik-ji 실행시 nw.exe 실행 파일의 위치와 process의 기본위치(cwd)가 다르기 때문인것 같습니다. (jik-ji 는 런타임에 cwd를 바꿉니다.)
execPath를 런타임에 현재 cwd와의 상대경로 설정하면 (예 : ../bin/nw/nw.exe
) 문제 없이 돌아가긴 하지만 패키징 후에는 bin 폴더의 위치가 root 드라이브 자체가 달라지기 때문에(임시폴더에 압축을 풀게됨) 상대 경로로 설정할 수 없어 문제는 여전히 발생하게 됩니다.
// unzip package 인 경우에는 사용 가능함
var relativeExecPath = path.relative(process.cwd(), process.execPath);
var worker = fork("worker.js", {execPath: relativeExecPath});
한글 경로를 생략하기 위해 환경변수에 등록해서 호출하는 방법도 효과가 없었습니다.
var obj = path.parse(process.execPath);
process.env['Path'] = obj.dir + ';' + process.env['Path'];
var worker = fork("worker.js", {
env: Object.create(process.env),
execPath: obj.base
});
마지막으로 child process의 cwd를 직접 지정해 주었습니다.
var obj = path.parse(process.execPath);
var worker = fork("worker.js", {
cwd: obj.dir,
execPath: obj.base
});
패키징 후에도 아직까지 문제는 발생되지 않고 있습니다. ^^
0.4.11 버전(이상)에서 처리(구현) 되었습니다.
0.4.5 버전에서 편집 작업 중 좌측 트리 (썸네일 보기)의 이미지가 갱신되지 않습니다. 썸네일 캡쳐작업을 건너뛰고 있는듯한 느낌입니다.