Electron অ্যাপ্লিকেশন তৈরি করার সময় Node.js ইন্টিগ্রেশন সক্ষম বা নিষ্ক্রিয় করা যেতে পারে। Node.js ইন্টিগ্রেশন যখন নিষ্ক্রিয় করা থাকে, তখন Renderer Process (যেমন HTML, CSS, এবং JavaScript এর মাধ্যমে তৈরি UI) থেকে Node.js API অ্যাক্সেস করা সম্ভব হয় না। এর ফলে অ্যাপ্লিকেশনটি নিরাপদ হয়ে ওঠে, কারণ এটি Renderer Process থেকে সরাসরি ফাইল সিস্টেম বা অন্যান্য সিস্টেম-লেভেল API অ্যাক্সেস করতে বাধা দেয়।
কেন Node.js ইন্টিগ্রেশন নিষ্ক্রিয় করবেন?
- নিরাপত্তা: যদি আপনার অ্যাপ্লিকেশন ওয়েব কনটেন্ট বা ব্যবহারকারীর ইনপুট গ্রহণ করে, তবে এটি নিরাপত্তার জন্য গুরুত্বপূর্ণ। Node.js ইন্টিগ্রেশন নিষ্ক্রিয় করলে এটি যথেষ্ট নিরাপদ হতে পারে, কারণ এটি Renderer Process থেকে Node.js ফিচার অ্যাক্সেসের সুযোগ দেয় না।
- ওয়েব অ্যাপের মতো কার্যকারিতা: অনেক সময় অ্যাপ্লিকেশন এমনভাবে ডিজাইন করা হয় যে, এটি মূলত একটি ওয়েব অ্যাপ্লিকেশন এর মতো কাজ করবে এবং Node.js API ব্যবহার করার প্রয়োজন নেই।
Node.js ইন্টিগ্রেশন নিষ্ক্রিয় করার উপায়
Node.js ইন্টিগ্রেশন নিষ্ক্রিয় করতে আপনি webPreferences এর nodeIntegration অপশনটি false করতে হবে। এটি BrowserWindow কনফিগারেশনে করা হয়।
উদাহরণ: Node.js ইন্টিগ্রেশন নিষ্ক্রিয় করা
const { app, BrowserWindow } = require('electron');
let mainWindow;
app.on('ready', () => {
mainWindow = new BrowserWindow({
width: 800,
height: 600,
webPreferences: {
nodeIntegration: false, // Node.js ইন্টিগ্রেশন নিষ্ক্রিয় করা
contextIsolation: true, // Renderer Process থেকে মূল প্রক্রিয়া আলাদা রাখা
},
});
mainWindow.loadFile('index.html');
});
এখানে nodeIntegration: false দ্বারা Renderer Process-এ Node.js API অ্যাক্সেস নিষ্ক্রিয় করা হয়েছে। এর ফলে, Renderer Process শুধুমাত্র Web APIs ব্যবহার করতে পারবে এবং Node.js এর ফিচারগুলো ব্যবহার করতে পারবে না।
contextIsolation: true: এটি Renderer Process থেকে Main Process-এর কোড পৃথকভাবে কার্যকর করার জন্য ব্যবহৃত হয়। এটি নিরাপত্তা বাড়াতে সাহায্য করে, কারণ এটিwindowএবংglobalঅবজেক্টগুলোর মধ্যে বিভাজন সৃষ্টি করে।
ইন্টিগ্রেশন নিষ্ক্রিয় করার পর কী হবে?
- Node.js API অ্যাক্সেস করা যাবে না: আপনি
fs,path,osইত্যাদি Node.js মডিউলগুলি ব্যবহার করতে পারবেন না। - Renderer Process এ সুরক্ষা বৃদ্ধি: যদি আপনি WebView বা external content লোড করতে চান, তাহলে এটি বেশি নিরাপদ হবে, কারণ Renderer Process Node.js API অ্যাক্সেস করতে পারবে না।
Renderer Process এ ipcRenderer ব্যবহার
যেহেতু Node.js ইন্টিগ্রেশন নিষ্ক্রিয় করা হয়, তাই Renderer Process-এ ipcRenderer ব্যবহার করে Main Process এর সাথে যোগাযোগ করা হয়, তবে Node.js API ব্যবহার করা সম্ভব হবে না।
উদাহরণ: Renderer Process (index.html)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Node.js ইন্টিগ্রেশন নিষ্ক্রিয়</title>
</head>
<body>
<h1>Node.js ইন্টিগ্রেশন নিষ্ক্রিয় করা হয়েছে!</h1>
<button id="messageButton">Main Process-এ মেসেজ পাঠাও</button>
<script>
// ipcRenderer ব্যবহারের মাধ্যমে Main Process এর সাথে যোগাযোগ করা
const { ipcRenderer } = require('electron');
document.getElementById('messageButton').addEventListener('click', () => {
ipcRenderer.send('message-from-renderer', 'Hello from Renderer!');
});
ipcRenderer.on('reply-from-main', (event, message) => {
console.log(message);
});
</script>
</body>
</html>
এখানে, ipcRenderer ব্যবহার করে Renderer Process থেকে Main Process-এ মেসেজ পাঠানো হচ্ছে এবং সাড়া গ্রহণ করা হচ্ছে। যদিও Node.js ইন্টিগ্রেশন নিষ্ক্রিয় করা হয়েছে, তবুও ipcRenderer কাজ করবে কারণ এটি Electron API এর অংশ।
সারাংশ
- Node.js ইন্টিগ্রেশন নিষ্ক্রিয় করলে Renderer Process থেকে Node.js ফিচার ব্যবহার করা যাবে না, যা নিরাপত্তা বাড়াতে সাহায্য করে।
webPreferences: { nodeIntegration: false }সেটিংস ব্যবহার করে Node.js ইন্টিগ্রেশন নিষ্ক্রিয় করা হয়।contextIsolation: trueব্যবহার করে Renderer Process এবং Main Process এর মধ্যে কোডের বিভাজন নিশ্চিত করা হয়।- এই পদ্ধতিটি নিরাপত্তা বৃদ্ধিতে সহায়তা করে এবং WebView বা অন্যান্য বাইরের কনটেন্ট লোড করার ক্ষেত্রে আরও নিরাপদ করে তোলে।
Read more