현재 장비 내 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 }) // 변경