* 개발 목표 : Build cross platform desktop apps with JavaScript, HTML, and CSS
one source, multi use 란 말이 하나의 소설이 만화, 영화, 웹툰, 드라마 등 여러곳으로 파장되듯 소프트웨어 개발에도 적용하면 사용 확장성이 늘어날 것 같다.
HTML, CSS, JavaScript 등을 이용해서 만든 ChatASTRO라는 AI 점성술사 웹 서비스를 데스크탑 애플리케이션으로 만들고자 한다. 이렇게 만든 데스크탑 애플리케이션은 윈도우, 맥, 리눅스에서 설치할 수 있다.
*
* 프로젝트 내용 : 챗아스트로 웹 서비스를 데스크탑 애플리케이션으로 만들기
챗아스트로 웹서비스 : https://chatastro.pages.dev
ChatASTRO, AI Astrologer
chatastro.pages.dev
* 사용 기술 및 플랫폼 : Electron
* 개발 절차
1. Node.js 설치 : https://nodejs.org/ko/download
다운로드 | Node.js
Node.js® is a JavaScript runtime built on Chrome's V8 JavaScript engine.
nodejs.org
2. 프로젝트 폴더 생성 및 이동
mkdir chatastro-electron-app
cd chatastro-electron-app
3. package.json 파일 초기화
npm init
package name : chatastro_electron_app
version : 1.0.0
description : chatastro electron app
entry point : index.js
...
4. 프로젝트에 Electron 설치
npm install electron --save-dev
5. index.js 파일 만들고 기본 코드 작성
6. index.html 파일 작성 대신 chatastro 의 웹서비스 load
* index.js 파일은 https://chatastro.pages.dev 페이지를 electron의 BrowerWindow 에 로드하는 코드가 기본으로 들어감
const { app, BrowserWindow } = require('electron');
function createWindow() {
// 브라우저 창을 만들기
const mainWindow = new BrowserWindow({
width: 400,
height: 600,
webPreferences: {
nodeIntegration: true,
contextIsolation: false,
// 여기에 partition 설정을 추가
// partition: 'persist:chatastro_electron_app'
}
});
// index.html 파일대신, 여기서는 https://chatastro.pages.dev 사이트 불러오기 실행
// mainWindow.loadFile('index.html');
mainWindow.loadURL('https://chatastro.pages.dev');
// 새 창에서 링크가 열릴 때마다 이벤트를 처리.
mainWindow.webContents.setWindowOpenHandler(({ url }) => {
const newWindow = new BrowserWindow({
width: 800,
height: 600,
webContents: { ...mainWindow.webContents },
});
newWindow.loadURL(url);
return { action: 'deny' }; // deny을 반환하면 기본 창을 새로 만드는 것을 막는다.
});
}
app.whenReady().then(createWindow);
app.on('window-all-closed', () => {
if (process.platform !== 'darwin') {
app.quit();
}
});
app.on('activate', () => {
if (BrowserWindow.getAllWindows().length === 0) {
createWindow();
}
});
* 특이 사항 : 웹페이지에서 <a href="xxx"> 새로운 창을 띄울 때 target="_blank" 태그를 꼭 넣어줘야 함.
target="_blank" 옵션을 넣어야 별도창에서 실행이 되고 원래 화면의 내용이 유지가 됨.
웹브라우저에서는 이전가기 버튼 실행시 이전 화면의 내용이 잘 유지가 되도록 설계가 되어있어서 차이를 모르겠지만 웹뷰앱이나 electron 애플리케이션에서는 별도창에 뜨지 않을 경우 원래 화면으로 갈 때 데이터를 캐쉬해주는 복잡한 작업이 이루어 져야 함. 위 소스에서는 newWindow 만드는 부분이 별도 창 띄우는 코드임.
7. package.json 파일의 scripts 부분에 아래 코드 넣기
"scripts": {
"start": "electron ."
}
8. 실행
npm start
9. electron-builder 이용한 배포/빌드
electron-builder
electron-builder A complete solution to package and build a ready for distribution Electron app for macOS, Windows and Linux with “auto update” support out of the box. NPM packages management: Code Signing on a CI server or development machine. Auto Up
www.electron.build
💕 다음편에 계속됩니다....