- Home »

Как написать первую программу на JavaScript
Хотите погрузиться в мир JavaScript и написать свою первую программу? Если вы системный администратор или DevOps-инженер, который привык к терминалам и серверам, то добро пожаловать в мир фронтенда и серверного JS! Эта статья поможет вам быстро освоить основы JavaScript, понять его синтаксис и написать первые рабочие скрипты. Мы разберём всё от установки среды разработки до деплоя на сервер, с практическими примерами и готовыми командами.
Как работает JavaScript: от V8 до Node.js
JavaScript – это интерпретируемый язык программирования, который изначально создавался для веб-браузеров. Но с появлением Node.js он стал полноценным серверным языком. Движок V8 (тот самый, что в Chrome) компилирует JS-код в машинный код на лету, что даёт неплохую производительность.
Основные особенности:
- Динамическая типизация – не нужно объявлять типы переменных
- Событийно-ориентированная архитектура – идеально для асинхронных задач
- Прототипное наследование – отличается от классического ООП
- Замыкания – мощный инструмент для создания приватных переменных
Быстрая настройка среды разработки
Для начала работы понадобится Node.js. Если у вас Ubuntu/Debian:
curl -fsSL https://deb.nodesource.com/setup_lts.x | sudo -E bash -
sudo apt-get install -y nodejs
node --version
npm --version
Для CentOS/RHEL:
curl -fsSL https://rpm.nodesource.com/setup_lts.x | sudo bash -
sudo yum install -y nodejs
node --version
Создаём рабочую директорию и инициализируем проект:
mkdir my-first-js-app
cd my-first-js-app
npm init -y
touch app.js
Для комфортной разработки рекомендую установить VS Code с расширением “JavaScript (ES6) code snippets” или использовать vim с плагином coc.nvim.
Первая программа: Hello World и основы синтаксиса
Создаём файл app.js
с классическим примером:
// app.js
console.log("Hello, World!");
// Переменные
let serverName = "web-server-01";
const port = 3000;
var isRunning = true; // лучше не использовать var
// Функции
function startServer(name, port) {
console.log(`Starting ${name} on port ${port}`);
return `Server ${name} is running on port ${port}`;
}
// Стрелочные функции (ES6)
const stopServer = (name) => {
console.log(`Stopping ${name}`);
return `Server ${name} stopped`;
};
// Вызов функций
console.log(startServer(serverName, port));
console.log(stopServer(serverName));
Запуск:
node app.js
Результат:
Hello, World!
Starting web-server-01 on port 3000
Server web-server-01 is running on port 3000
Stopping web-server-01
Server web-server-01 stopped
Практические примеры для системных администраторов
Пример 1: Мониторинг системы
// system-monitor.js
const fs = require('fs');
const os = require('os');
function getSystemInfo() {
const loadAvg = os.loadavg();
const freeMemory = os.freemem();
const totalMemory = os.totalmem();
const memoryUsage = ((totalMemory - freeMemory) / totalMemory * 100).toFixed(2);
return {
hostname: os.hostname(),
platform: os.platform(),
architecture: os.arch(),
loadAverage: loadAvg[0].toFixed(2),
memoryUsage: `${memoryUsage}%`,
uptime: `${Math.floor(os.uptime() / 3600)}h ${Math.floor((os.uptime() % 3600) / 60)}m`
};
}
// Вывод в JSON формате
console.log(JSON.stringify(getSystemInfo(), null, 2));
// Запись в файл
fs.writeFileSync('system-info.json', JSON.stringify(getSystemInfo(), null, 2));
Пример 2: Простой HTTP сервер
// server.js
const http = require('http');
const fs = require('fs');
const server = http.createServer((req, res) => {
if (req.url === '/') {
res.writeHead(200, { 'Content-Type': 'text/html' });
res.end('
Server is running!
‘); } else if (req.url === ‘/status’) { res.writeHead(200, { ‘Content-Type’: ‘application/json’ }); res.end(JSON.stringify({ status: ‘OK’, timestamp: new Date().toISOString(), memory: process.memoryUsage() })); } else { res.writeHead(404, { ‘Content-Type’: ‘text/plain’ }); res.end(‘404 Not Found’); } }); const PORT = process.env.PORT || 3000; server.listen(PORT, () => { console.log(`Server running on port ${PORT}`); }); // Graceful shutdown process.on(‘SIGTERM’, () => { console.log(‘Received SIGTERM, shutting down gracefully’); server.close(() => { process.exit(0); }); });
Запуск сервера:
node server.js
Создание systemd сервиса:
sudo tee /etc/systemd/system/nodeapp.service > /dev/null <
Сравнение с другими языками для системных задач
Критерий | JavaScript (Node.js) | Python | Bash |
---|---|---|---|
Асинхронность | Встроенная, event loop | asyncio, но сложнее | Только через & и jobs |
HTTP API | Отлично, много фреймворков | Flask, Django – хорошо | curl + jq – базово |
Системные вызовы | Через child_process | subprocess, os – отлично | Нативно |
Парсинг JSON | Нативно | json module | jq утилита |
Производительность | Высокая (V8) | Средняя | Быстрая для простых задач |
Продвинутые возможности и автоматизация
Работа с файловой системой
// file-operations.js
const fs = require('fs').promises;
const path = require('path');
async function processLogFiles(directory) {
try {
const files = await fs.readdir(directory);
const logFiles = files.filter(file => file.endsWith('.log'));
for (const file of logFiles) {
const filePath = path.join(directory, file);
const stats = await fs.stat(filePath);
const content = await fs.readFile(filePath, 'utf8');
console.log(`File: ${file}`);
console.log(`Size: ${stats.size} bytes`);
console.log(`Lines: ${content.split('\n').length}`);
console.log(`Error lines: ${content.split('\n').filter(line => line.includes('ERROR')).length}`);
console.log('---');
}
} catch (error) {
console.error('Error processing files:', error.message);
}
}
// Использование
processLogFiles('/var/log/');
Мониторинг с уведомлениями
// monitoring.js
const { exec } = require('child_process');
const https = require('https');
class SystemMonitor {
constructor(webhookUrl) {
this.webhookUrl = webhookUrl;
}
async checkDiskSpace() {
return new Promise((resolve, reject) => {
exec("df -h / | awk 'NR==2 {print $5}' | sed 's/%//'", (error, stdout) => {
if (error) reject(error);
resolve(parseInt(stdout.trim()));
});
});
}
async sendAlert(message) {
const data = JSON.stringify({ text: message });
const options = {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Content-Length': data.length
}
};
const req = https.request(this.webhookUrl, options);
req.write(data);
req.end();
}
async monitor() {
const diskUsage = await this.checkDiskSpace();
if (diskUsage > 80) {
await this.sendAlert(`⚠️ Disk usage is ${diskUsage}% on ${require('os').hostname()}`);
}
console.log(`Disk usage: ${diskUsage}%`);
}
}
// Запуск мониторинга каждые 5 минут
const monitor = new SystemMonitor('https://hooks.slack.com/your-webhook-url');
setInterval(() => monitor.monitor(), 5 * 60 * 1000);
Деплой на сервер
Для деплоя вашего приложения понадобится VPS сервер. Рекомендую взять VPS с предустановленной средой или выделенный сервер для более серьёзных проектов.
Создаём Dockerfile для контейнеризации:
# Dockerfile
FROM node:18-alpine
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production
COPY . .
EXPOSE 3000
USER node
CMD ["node", "server.js"]
Сборка и запуск:
docker build -t my-js-app .
docker run -d -p 3000:3000 --name js-app my-js-app
# Или с docker-compose
cat > docker-compose.yml << 'EOF'
version: '3.8'
services:
app:
build: .
ports:
- "3000:3000"
restart: unless-stopped
environment:
- NODE_ENV=production
EOF
docker-compose up -d
Интересные факты и нестандартные применения
JavaScript можно использовать не только для веб-разработки:
- Автоматизация браузера – Puppeteer для скрейпинга и тестирования
- Десктопные приложения – Electron (VS Code, Discord, Slack)
- Мобильные приложения – React Native, Ionic
- Системные скрипты – замена bash скриптов для сложной логики
- Serverless функции – AWS Lambda, Vercel Functions
- IoT устройства – Johnny-Five для Arduino
Забавный факт: JavaScript был создан за 10 дней в 1995 году, а сейчас это один из самых популярных языков программирования в мире!
Полезные ресурсы
- Node.js Official – официальная документация
- MDN JavaScript – лучшая документация по языку
- NPM Registry – репозиторий пакетов
- Node.js Best Practices – сборник лучших практик
Заключение и рекомендации
JavaScript – это мощный инструмент для современного системного администратора. Он отлично подходит для создания API, автоматизации задач, мониторинга систем и интеграции с различными сервисами. Асинхронная природа языка делает его идеальным для network-задач и обработки событий.
Когда использовать JavaScript:
- Создание REST API и микросервисов
- Автоматизация задач с HTTP запросами
- Реальное время мониторинг (WebSocket)
- Интеграция с облачными сервисами
- Обработка JSON данных
Когда лучше выбрать другой язык:
- Простые системные скрипты – bash
- Машинное обучение – Python
- Высокопроизводительные приложения – Go, Rust
- Системное программирование – C/C++
Начните с простых скриптов, изучите асинхронность и модульность Node.js. Со временем вы сможете создавать сложные системы мониторинга, автоматизации и интеграции. JavaScript превратился из “игрушечного” языка в серьёзный инструмент для backend-разработки и системного администрирования.
В этой статье собрана информация и материалы из различных интернет-источников. Мы признаем и ценим работу всех оригинальных авторов, издателей и веб-сайтов. Несмотря на то, что были приложены все усилия для надлежащего указания исходного материала, любая непреднамеренная оплошность или упущение не являются нарушением авторских прав. Все упомянутые товарные знаки, логотипы и изображения являются собственностью соответствующих владельцев. Если вы считаете, что какой-либо контент, использованный в этой статье, нарушает ваши авторские права, немедленно свяжитесь с нами для рассмотрения и принятия оперативных мер.
Данная статья предназначена исключительно для ознакомительных и образовательных целей и не ущемляет права правообладателей. Если какой-либо материал, защищенный авторским правом, был использован без должного упоминания или с нарушением законов об авторском праве, это непреднамеренно, и мы исправим это незамедлительно после уведомления. Обратите внимание, что переиздание, распространение или воспроизведение части или всего содержимого в любой форме запрещено без письменного разрешения автора и владельца веб-сайта. Для получения разрешений или дополнительных запросов, пожалуйста, свяжитесь с нами.