لتحويل تطبيق الويب (HTML وCSS وJavaScript) إلى ملف تنفيذي (EXE) يمكن تشغيله على جهاز الكمبيوتر، يمكنك استخدام أدوات مثل . Electron هو إطار عمل مفتوح المصدر يسمح لك ببناء تطبيقات سطح المكتب باستخدام تقنيات الويب.
تحويل تطبيق ويب ( html-css-javascript ) الي ملف EXE
ما هو Electron
هو إطار عمل مفتوح المصدر يتيح للمطورين إنشاء تطبيقات سطح المكتب باستخدام تقنيات الويب مثل JavaScript وHTML وCSS. تم تطويره بواسطة GitHub ويستخدم حزمة Node.js وChromium كقاعدة له. يمكّن Electron المطورين من بناء تطبيقات عبر منصات متعددة (Windows، macOS، Linux) دون الحاجة إلى كتابة كود منفصل لكل نظام تشغيل.
المتطلبات
Node js
تاكد من تثبيت برنامج Node js والافضل يكون احدث اصدار او انتقل إلى موقع Node.js الرسمي وحمّل المثبت المناسب لنظام Windows الخاص بك
انشاء مجلد المشروع
للتوضيح سوف نقوم بتحويل مشروع سابق وهو مشغل الصوتيات باستخدام javascript ويمكنك الرجوع الية من هنا
والان لنقوم بانشاء مجلد للمشروع يجب تنفيذ الامر التالي من خلال commend line او visual studio code
mkdir my-audio-player
cd my-audio-player
بعد ذلك نقوم بتهيئة المشروع بالامر التالي
npm init -y
تثبيت Electron
npm install electron --save-dev
إعداد ملفات المشروع
تاكد من إنشاء البنية التالية في مجلد المشروع
my-audio-player/
├── index.html
├── script.js
├── main.js
├── package.json
└── styles.css
إعداد index.html
استخدم ملف HTML الموجود لدينا مسبقًا ( تأكد من تضمين مسار صحيح لملف CSS وملف JavaScript )
مشغل الصوتيات
مشغل الصوتيات
الأغنية الحالية: لا توجد أغنية
إعداد ملف JavaScript (script.js)
document.getElementById('fileInput').addEventListener('change', handleFileSelect, false);
document.getElementById('prevBtn').addEventListener('click', playPrevious);
document.getElementById('nextBtn').addEventListener('click', playNext);
document.getElementById('shuffleBtn').addEventListener('click', toggleShuffle);
document.getElementById('audioPlayer').addEventListener('ended', playNext);
document.getElementById('playPauseBtn').addEventListener('click', togglePlayPause);
const fileList = document.getElementById('fileList');
const audioPlayer = document.getElementById('audioPlayer');
const currentSong = document.getElementById('currentSong');
let audioFiles = [];
let currentIndex = 0;
let isShuffle = false;
function handleFileSelect(event) {
fileList.innerHTML = '';
audioFiles = [];
const files = event.target.files;
for (const file of files) {
if (file.type === 'audio/mpeg' || file.name.endsWith('.mp3')) {
const listItem = document.createElement('li');
listItem.textContent = file.name;
listItem.addEventListener('click', () => playAudioFile(file, audioFiles.indexOf(file)));
fileList.appendChild(listItem);
audioFiles.push(file);
}
}
if (audioFiles.length > 0) {
playAudioFile(audioFiles[0], 0); // تشغيل أول ملف بشكل افتراضي
}
}
function playAudioFile(file, index) {
const fileURL = URL.createObjectURL(file);
audioPlayer.src = fileURL;
audioPlayer.play();
updatePlayPauseButton(true);
currentSong.textContent = `الأغنية الحالية: ${file.name}`;
currentIndex = index;
}
function playNext() {
if (isShuffle) {
currentIndex = Math.floor(Math.random() * audioFiles.length);
} else {
currentIndex = (currentIndex + 1) % audioFiles.length;
}
playAudioFile(audioFiles[currentIndex], currentIndex);
}
function playPrevious() {
if (isShuffle) {
currentIndex = Math.floor(Math.random() * audioFiles.length);
} else {
currentIndex = (currentIndex - 1 + audioFiles.length) % audioFiles.length;
}
playAudioFile(audioFiles[currentIndex], currentIndex);
}
function toggleShuffle() {
isShuffle = !isShuffle;
document.getElementById('shuffleBtn').textContent = isShuffle ? 'ترتيب' : 'عشوائي';
}
function togglePlayPause() {
if (audioPlayer.paused) {
audioPlayer.play();
updatePlayPauseButton(true);
} else {
audioPlayer.pause();
updatePlayPauseButton(false);
}
}
function updatePlayPauseButton(isPlaying) {
const playPauseBtn = document.getElementById('playPauseBtn');
playPauseBtn.textContent = isPlaying ? 'إيقاف' : 'تشغيل';
}
إعداد main.js
قم بإنشاء ملف جافا سكريبت main.js
لتهيئة تطبيق Electron
const { app, BrowserWindow } = require('electron');
const path = require('path');
function createWindow() {
const mainWindow = new BrowserWindow({
width: 800,
height: 600,
webPreferences: {
preload: path.join(__dirname, 'preload.js'),
nodeIntegration: true,
contextIsolation: false
}
});
mainWindow.loadFile('index.html');
}
app.on('ready', createWindow);
app.on('window-all-closed', () => {
if (process.platform !== 'darwin') {
app.quit();
}
});
app.on('activate', () => {
if (BrowserWindow.getAllWindows().length === 0) {
createWindow();
}
});
تحديث package.json
تحديث package.json
لإعداد بدء تشغيل التطبيق باستخدام Electron
{
"name": "my-audio-player",
"version": "1.0.0",
"description": "A simple audio player",
"main": "main.js",
"scripts": {
"start": "electron ."
},
"devDependencies": {
"electron": "^13.1.7"
}
}
اعداد ملف CSS (styles.css)
/* تعميم نمط النصوص وتنسيق الصفحة الأساسية */
body {
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
background-color: #eceff1;
margin: 0;
padding: 20px;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
min-height: 100vh;
}
/* تنسيق عنوان الصفحة */
h1 {
text-align: center;
color: #333;
}
/* تنسيق الحاوية الرئيسية */
.container {
display: flex;
flex-direction: column;
align-items: center;
width: 100%;
max-width: 600px;
background-color: #fff;
padding: 20px;
border-radius: 10px;
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
}
/* تنسيق قائمة التشغيل */
.playlist {
width: 100%;
margin-bottom: 20px;
}
#fileInput {
width: 100%;
margin-bottom: 10px;
}
#fileList {
list-style: none;
padding: 0;
margin: 0;
max-height: 200px;
overflow-y: auto;
border: 1px solid #ddd;
border-radius: 5px;
}
#fileList li {
padding: 10px;
border-bottom: 1px solid #ddd;
cursor: pointer;
transition: background-color 0.3s ease;
}
#fileList li:hover {
background-color: #f0f0f0;
}
/* تنسيق مشغل الصوت */
.player {
width: 100%;
text-align: center;
}
#currentSong {
margin-bottom: 10px;
font-weight: bold;
color: #007bff;
}
audio {
width: 100%;
margin-bottom: 10px;
border-radius: 5px;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
}
/* تنسيق أزرار التحكم */
.controls {
display: flex;
justify-content: space-around;
}
.controls button {
background-color: #007bff;
color: white;
border: none;
padding: 10px 20px;
border-radius: 5px;
cursor: pointer;
font-size: 16px;
transition: background-color 0.3s ease, transform 0.2s ease;
}
.controls button:hover {
background-color: #0056b3;
}
.controls button:focus {
outline: none;
}
.controls button:active {
transform: scale(0.95);
}
/* تهيئة التصميم ليكون متجاوباً مع الشاشات الصغيرة */
@media (max-width: 600px) {
.container {
padding: 10px;
}
.controls button {
padding: 8px 16px;
font-size: 14px;
}
#fileList {
max-height: 150px;
}
}
تشغيل التطبيق
قم بتشغيل التطبيق باستخدام الأمر التالي
npm start
تحويل المشروع إلى ملف EXE
لتحويل المشروع إلى ملف EXE، يمكنك استخدام أداة electron-packager
أو electron-builder
. سنستخدم هنا electron-packager
نقم بتثبيتة بالامر التالي
npm install electron-packager --save-dev
ثم استخدم electron-packager
لتعبئة التطبيق بالامر التالي
npx electron-packager . my-audio-player --platform=win32 --arch=x64 --out=dist --overwrite
سيتم إنشاء ملف EXE في مجلد dist/my-audio-player-win32-x64
.
الملف التنفيذي الذي تم إنشاؤه في المجلد dist
يمكن توزيعه كمشغل صوتيات مستقل يعمل على أجهزة Windows.
التحكم في إعدادات البرنامج
يمكنك التحكم في إعدادات برنامجك ومظهره باستخدام ملفات التكوين (configuration files) وملفات الأنماط (CSS) وأيضًا عن طريق تعديل ملف main.js
الخاص بـ Electron لإعداد نوافذ التطبيق وإضافة ميزات أخرى.
يمكنك استخدام ملف تكوين لتحديد الإعدادات الافتراضية لبرنامجك. لنفترض أنك تريد حفظ بعض الإعدادات مثل حجم النافذة الافتراضي ووضع العرض او تغيير لون
{
"window": {
"width": 800,
"height": 600,
"fullscreen": false
},
"theme": {
"backgroundColor": "#ffffff",
"textColor": "#000000"
}
}
Sharing to