상황
electron 빌드 시 nsis를 사용해서 윈도우 설치파일을 만든다 가정했을 때 아래의 오류가 발생함
Bad text encoding: <stdin>:74
Error in script "<stdin>" on line 74 -- aborting creation process
stackTrace=
...
뒤에 숫자는 소스에따라 달라질 수 있는데 여기서 중요한것은 빌드에 사용되는 소스중에 nsis에서 현재 호환되지 않는 text encoding이 있다는 것이다. 이 때 대부분은 소스나 경로에 한글이 들어간 경우일 것이다.
해결방법
이 경우 node_modules 디렉토리 아래에 위치한 모듈 중에 app-builder-lib안에 js파일을 수정해서 nsis로 빌드할 때 UTF8로 하겠다고 옵션을 주면 된다.
node_modules/app-builder-lib/out/targets/nsis/NsisTarget.js
async executeMakensis(defines, commands, script) {
const args = this.options.warningsAsErrors === false ? [] : ["-WX"];
// 옵션 추가 (add option)
args.push("-INPUTCHARSET", "UTF8", "-OUTPUTCHARSET", "UTF8");
for (const name of Object.keys(defines)) {
const value = defines[name];
if (value == null) {
args.push(`-D${name}`);
} else {
args.push(`-D${name}=${value}`);
}
}
...
async executeMakensis 키워드로 검색하면 금방 찾을 수 있는데 여기서 중요한것은 옵션을 추가하는 라인이다.
const args 초기화 라인 아래에 args에 옵션을 push해주면된다.
그리고 다시 빌드를 해보면 문제없이 된다.
참고
https://github.com/electron-userland/electron-builder/issues/4898