[Nextron] F12를 눌러서 개발자도구 활성화 하기

woohyuk·2023년 2월 2일
0

Nextron 기본 환경설정이 끝나고 npm run dev로 실행을 시켰다.
그런데 실행된 환경에서 개발자도구를 이용해서 디버깅을 해야하는데 F12를 눌러도 작동을 하지않았던 것이다.
두가지 방법을 통해 해결을 할 수 있었고 두번째 방법을 사용하는 것을 추천한다.

1. 렌더러 프로세스에서 메인 프로세스로 요청

아래는 렌더러 프로세스(renderer.js)에서 키보드를 감지하고 F12가 발생되면 메인 프로세스(main.js)에 메시지를 보내 디버그 툴을 On/Off 하는 코드이다.

  • main/helpers/background.ts (메인 프로세스)
import { app, ipcMain } from 'electron';
import serve from 'electron-serve';
import { createWindow } from './helpers';

const isProd: boolean = process.env.NODE_ENV === 'production';

if (isProd) {
  serve({ directory: 'app' });
} else {
  app.setPath('userData', `${app.getPath('userData')} (development)`);
}

(async () => {
  await app.whenReady();

  const mainWindow = createWindow('main', {
    width: 1000,
    height: 600,
  });

  if (isProd) {
    await mainWindow.loadURL('app://./home.html');
  } else {
    const port = process.argv[2];
    await mainWindow.loadURL(`http://localhost:${port}/home`);
    mainWindow.webContents.openDevTools();
  }

  //렌더러프로세스에서 보내는 메시지 처리
   ipcMain.on('toggle-debug', () => {
     //디버기 툴 토글(on/off)
     mainWindow.webContents.toggleDevTools();
   });
 
})();

app.on('window-all-closed', () => {
  app.quit();
});
  • renderer/pages/home.tsx
import React, { useEffect } from 'react';
import Head from 'next/head';
import Link from 'next/link';
import { ipcRenderer } from 'electron';

function Home() {
  useEffect(() => {
    document.addEventListener('keydown', event => {
      if (event.code == 'F12') {
        //메인프로세스로 toggle-debug 메시지 전송
        ipcRenderer.send('toggle-debug');
      }
    });
  }, []);

  return (
    <>
      <Head>
        <title>Home - Nextron (with-typescript)</title>
      </Head>
      <div>
        <p>
          ⚡ Electron + Next.js ⚡ -
          <Link href='/next'>
            <a>Go to next page</a>
          </Link>
        </p>
        <img src='/images/logo.png' />
      </div>
    </>
  );
}

export default Home;

위와 같이 설정하면 렌더러 프로세스에서 toggle-debug 메세지를 보내고 메인 프로세스에서 toggle-debug를 받아서 최종적으로 mainWindow.webContents.toggleDevTools()가 실행 된다.

2. 메인 프로세스 자체적으로 처리

1) 패키치 설치

 npm install electron-localshortcut

2) 사용 방법

import { app, ipcMain } from 'electron';
import serve from 'electron-serve';
import { createWindow } from './helpers';
import electronLocalshortcut from 'electron-localshortcut';

const isProd: boolean = process.env.NODE_ENV === 'production';

if (isProd) {
  serve({ directory: 'app' });
} else {
  app.setPath('userData', `${app.getPath('userData')} (development)`);
}

(async () => {
  await app.whenReady();

  const mainWindow = createWindow('main', {
    width: 1000,
    height: 600,
  });

  if (isProd) {
    await mainWindow.loadURL('app://./home.html');
  } else {
    const port = process.argv[2];
    await mainWindow.loadURL(`http://localhost:${port}/home`);
    mainWindow.webContents.openDevTools();
  }

  electronLocalshortcut.register(mainWindow, 'F12', () => {
    console.log('F12 is pressed');
    mainWindow.webContents.toggleDevTools();
  });
})();

app.on('window-all-closed', () => {
  app.quit();
});

'electron-localshortcut' 모듈을 이용해 메인 프로세스 자체적으로 키 입력받는 방법이다.
이 방법을 선호하는 이유는 렌더러 프로세스에 오류가 발생하면 아무런 동작을 하지않고, 무엇보다 관리해야하는 코드가 적어지기 때문이다.

이렇게 하면 정상적으로 개발자 도구를 On/Off 할 수가 있다.

profile
기록하는 습관을 기르자

0개의 댓글