ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [electron] gatsby + electron으로 데스크탑 앱 배포
    etc. 2022. 12. 18. 16:17

    기존의 gatsby 프로젝트에 electron을 설치하여 데스크탑 앱을 만들어 배포하려 한다.

    아래의 글을 기반으로 작성되었다!

     

     

    GitHub - soulehshaikh99/create-gatsby-electron-app: Discover the easiest way to get started with the blend of Gatsby and Electro

    Discover the easiest way to get started with the blend of Gatsby and Electron JS App - GitHub - soulehshaikh99/create-gatsby-electron-app: Discover the easiest way to get started with the blend of ...

    github.com

     

    1. 관련 종속성 설치

     npm i -D electron electron-builder wait-on concurrently
     npm i electron-serve

    위와 같이 devDependencies와 dependencies를 잘 구분하여 설치해야 한다. 안그러면 오류날 수 있다. (그랬던 사람)

     

    electron : 풍부한 네이티브(운영 체제) API로 런타임을 제공하여 순수 자바스크립트로 데스크톱 애플리케이션을 만들 수 있다. 웹 서버 대신 데스크톱 애플리케이션에 초점을 맞춘 Node.js 런타임의 변형으로 볼 수 있다.

    electron-builder : 즉시 배포할 수 있도록 package 와 build을 지원한다.  (수많은 형식을 지원)

    wait-on : 소켓과 http(s) 리소스가 사용 가능해질 때까지 기다릴 경우 사용한다.

    concurrently : 여러 명령을 동시에 실행하는데 사용한다.

    electron-serve : 일레트론 앱을 위한 정적 파일 서비스를 제공한다.

     

    2. 루트에 main.js 파일 생성

    const { app, BrowserWindow } = require("electron");
    const path = require("path");
    const serve = require("electron-serve");
    const loadURL = serve({ directory: "public" });
    
    let mainWindow;
    
    function isDev() {
      return !app.isPackaged;
    }
    
    function createWindow() {
      //브라우저 창을 만듦
      mainWindow = new BrowserWindow({
        width: 800,
        height: 600,
        webPreferences: {
          nodeIntegration: true,
        },
        icon: isDev()
          ? path.join(process.cwd(), "src/images/favicon.webp")
          : path.join(__dirname, "/public/icons/icon-512x512.png"),
        show: false,
        autoHideMenuBar: true,
      });
    
      // 개발 목적으로만 사용 
      // 앱이 패키지화 될 준비가 되면 loadURL(mainWindow); 만 남김
      if (isDev()) {
        mainWindow.loadURL("http://localhost:8000/");
      } else {
        loadURL(mainWindow);
      }
    
     // 창이 닫힐 때
      mainWindow.on("closed", function () {
        mainWindow = null;
      });
    
      // 창이 보여줄 준비가 되었을 때
      mainWindow.once("ready-to-show", () => {
        mainWindow.show();
      });
    }
    
    // Electron이 완료되면 호출.
    app.on("ready", createWindow);
    
    // 모든 창이 닫히면 종료
    app.on("window-all-closed", function () {
      if (process.platform !== "darwin") app.quit();
    });
    
    // MacOS에서는 앱에서 창을 다시 만드는 것이 일반적
    app.on("activate", function () {
      if (mainWindow === null) createWindow();
    });

     

     

    3. package.json

    build는 electron-builder에서 사용되며 OS 플랫폼마다 각 옵션을 추가할 수 있다.

    이전에 윈도우에서 패키지 했더니 아이콘이 제대로 설정되지 않아서 win 옵션에 ico 형식으로 아이콘을 설정했더니 원하는대로 나왔다.

    "main": "main.js",
    "build": {
      "icon": "아이콘 경로",
      "productName": "앱 이름",
      "files": [
        "public/**/*",
        "main.js"
      ],
       "win": {
          "icon": "아이콘 경로.ico"
        },
        // 윈도우 인스톨러 설정
        "nsis": {
          // 원클릭 설치 프로그램을 생성할지 defualt: true
          "oneClick": false,
          // 설치 관리자 페이지(시스템별 또는 사용자별 선택)를 표시할지 여부 default: false
          "perMachine": true,
          // 사용자가 설치 디렉터리를 변경할 수 있도록 허용할지 여부 default: false
          "allowToChangeInstallationDirectory": true,
          // 언어 지정 한국어-1042
          "language": 1042
        }
    }
    
    "scripts": {
      "build": "gatsby build",
      "develop": "gatsby develop",
      "format": "prettier --write \"**/*.{js,jsx,ts,tsx,json,md}\"",
      "serve": "gatsby serve",
      "clean": "gatsby clean",
      "test": "echo \"Write tests! -> https://gatsby.dev/unit-testing\" && exit 1",
      "prebuild": "yarn run clean",
      "electron": "wait-on http://localhost:8000 && electron .",
      "electron-dev": "concurrently \"yarn run develop\" \"yarn run electron\"",
      "preelectron-pack": "yarn run build",
      "electron-pack": "electron-builder"
    }

     

     

    npm run electron-pack

    아래의 스크립트를 실행하게 되면 앱이 배포가 시작된다.

    루트경로에 dist가 생성되면서 setup.exe가 생성되어 데스크탑 애플리케이션이 설치된다.

     

     

     

     

     

     

    반응형

    댓글

Designed by Tistory.