Electron 앱 다른 OS의 실행 파일로 빌드하기

강진석·2022년 5월 11일
0

Issue

현재 장비 내 PC에서 실행되는 로컬 서버를 Electron-builder를 통해 앱 형태로 배포하여 Electron으로 제작된 앱과 같은 형태로 배포 및 관리하려고 한다

장비는 윈도우 운영체제로 동작하지만 개발은 맥OS 환경에서 진행하고 있기 때문에 그냥 빌드하면 MacOS 용 dmg 패키지가 생성된다

만약 프로젝트의 package.json 내에 빌드 환경을 구성하고 스크립트를 통해 빌드를 진행할 때 --win --x64 등의 옵션을 걸어 윈도우용 실행 파일로 빌드할 수 있었다면 좋았겠지만, 이 프로젝트의 경우 배포 환경 문제로 builder.js 내에 옵션을 구성하고 이를 실행시켜 빌드를 진행했기 때문에 이 방법을 사용할 수 없었다

// ./src/builder.js

const { build } = require('app-builder-lib');
const builder = require('electron-builder');

const config = {
    extraMetadata: {
      //빌드할 electron
      main: main
    },
    productName: 'Server-App',
    //installer 이름
    artifactName: '${productName}-Setup-${version}.${ext}',
    
	//...
    
  }

builder.build({config});// 빌드

해결

build() 함수에서 config내에 플랫폼을 설정할 수 있는 옵션이 있을 것이라 생각하고 electron-builder 모듈을 뒤적거리다가 createTargets() 함수를 찾았다

// builder.d.ts

export declare function createTargets(platforms: Array<Platform>, type?: string | null, arch?: string | null): Map<Platform, Map<Arch, Array<string>>>;

build() 함수에서 target 속성을 통해 타켓 플랫폼을 설정할 수 있는데, 이 인자의 타입인 Map<Platform, Map<Arch, Array<string>>> 을 생성해 주는 함수가 바로 이 함수였다. 그리고 이 createTargets() 함수에서 platforms로 전달해야할 인자의 타입인 Array<Platform>builder.Platform 내에 선언되어 있으므로 빌드하고자하는 플랫폼을 불러와 배열로 만들어 전달하면 된다.

결과

// ./builder.js

//builer.build(); // 기존
builder.build({ targets:builder.createTargets([builder.Platform.WINDOWS], 'nsis', 'x64'), config }) // 변경

0개의 댓글