Перейти к основному содержимому

Установка Node.js

Установка последней версии Node.js различными способами с настройкой для разработки.

Официальная установка через NodeSource

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/Rocky Linux

curl -fsSL https://rpm.nodesource.com/setup_lts.x | sudo bash -

sudo dnf install -y nodejs

node --version
npm --version

Установка через Node Version Manager (NVM)

Установка NVM

curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash

source ~/.bashrc

nvm --version

Установка и использование Node.js

nvm list-remote

nvm install node

nvm install --lts

nvm install 18.19.0

nvm use node

nvm use --lts

nvm alias default node

nvm ls

Установка конкретной версии

nvm install 20.10.0
nvm use 20.10.0
nvm alias default 20.10.0

Установка через FNM (Fast Node Manager)

Установка FNM

curl -fsSL https://fnm.vercel.app/install | bash

source ~/.bashrc

fnm --version

Использование FNM

fnm list-remote

fnm install --lts

fnm install 20.10.0

fnm use lts-latest

fnm default lts-latest

fnm ls

Установка из исходного кода

Зависимости для сборки

sudo apt-get install build-essential libssl-dev

sudo dnf groupinstall "Development Tools"
sudo dnf install openssl-devel

Загрузка и компиляция

wget https://nodejs.org/dist/v20.10.0/node-v20.10.0.tar.gz

tar -xzf node-v20.10.0.tar.gz

cd node-v20.10.0

./configure --prefix=/usr/local

make -j$(nproc)

sudo make install

node --version

Настройка npm

Глобальная конфигурация npm

npm config set prefix ~/.npm-global

echo 'export PATH=~/.npm-global/bin:$PATH' >> ~/.bashrc
source ~/.bashrc

npm config list

npm config set registry https://registry.npmjs.org/

npm config set save-exact true

npm config set init-author-name "Your Name"
npm config set init-author-email "you@example.com"
npm config set init-license "MIT"

Настройка .npmrc

nano ~/.npmrc

Содержимое:

prefix=${HOME}/.npm-global
save-exact=true
fund=false
audit=false
init-author-name=Your Name
init-author-email=you@example.com
init-license=MIT

Альтернативные пакетные менеджеры

Установка Yarn

npm install -g yarn

yarn --version

yarn config set prefix ~/.yarn
echo 'export PATH="$HOME/.yarn/bin:$PATH"' >> ~/.bashrc
source ~/.bashrc

Установка pnpm

npm install -g pnpm

pnpm --version

pnpm setup
source ~/.bashrc

Установка глобальных пакетов

Полезные глобальные пакеты

npm install -g \
typescript \
ts-node \
nodemon \
pm2 \
http-server \
live-server \
json-server \
concurrently \
cross-env \
dotenv-cli \
eslint \
prettier

С использованием Yarn

yarn global add \
typescript \
ts-node \
nodemon \
pm2

С использованием pnpm

pnpm add -g \
typescript \
ts-node \
nodemon \
pm2

Настройка PM2 для продакшена

Установка и базовая настройка

npm install -g pm2

pm2 startup

sudo env PATH=$PATH:/usr/bin /usr/lib/node_modules/pm2/bin/pm2 startup systemd -u $USER --hp $HOME

Конфигурация ecosystem

pm2 init

nano ecosystem.config.js

Содержимое:

module.exports = {
apps: [
{
name: 'my-app',
script: './app.js',
instances: 'max',
exec_mode: 'cluster',
env: {
NODE_ENV: 'development',
PORT: 3000
},
env_production: {
NODE_ENV: 'production',
PORT: 3000
},
log_file: './logs/combined.log',
out_file: './logs/out.log',
error_file: './logs/error.log',
log_date_format: 'YYYY-MM-DD HH:mm Z',
merge_logs: true,
max_memory_restart: '1G'
}
]
};

Запуск приложений

pm2 start ecosystem.config.js

pm2 start ecosystem.config.js --env production

pm2 list

pm2 monit

pm2 save

Настройка для разработки

Базовый package.json

{
"name": "my-project",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"start": "node index.js",
"dev": "nodemon index.js",
"test": "jest",
"build": "npm run clean && npm run compile",
"clean": "rimraf dist",
"compile": "tsc",
"lint": "eslint src/**/*.ts",
"lint:fix": "eslint src/**/*.ts --fix",
"format": "prettier --write src/**/*.ts"
},
"keywords": [],
"author": "",
"license": "MIT",
"devDependencies": {
"@types/node": "^20.10.0",
"nodemon": "^3.0.2",
"typescript": "^5.3.3",
"ts-node": "^10.9.1",
"eslint": "^8.55.0",
"prettier": "^3.1.0",
"jest": "^29.7.0",
"rimraf": "^5.0.5"
},
"dependencies": {
"express": "^4.18.2",
"dotenv": "^16.3.1"
}
}

TypeScript конфигурация

npx tsc --init

nano tsconfig.json

Содержимое:

{
"compilerOptions": {
"target": "ES2020",
"module": "commonjs",
"lib": ["ES2020"],
"outDir": "./dist",
"rootDir": "./src",
"strict": true,
"esModuleInterop": true,
"skipLibCheck": true,
"forceConsistentCasingInFileNames": true,
"resolveJsonModule": true,
"declaration": true,
"declarationMap": true,
"sourceMap": true,
"removeComments": true,
"noImplicitReturns": true,
"noFallthroughCasesInSwitch": true,
"noUncheckedIndexedAccess": true,
"exactOptionalPropertyTypes": true
},
"include": ["src/**/*"],
"exclude": ["node_modules", "dist", "**/*.test.ts"]
}

Оптимизация производительности

Настройка Node.js для продакшена

export NODE_ENV=production
export NODE_OPTIONS="--max-old-space-size=4096"

node --max-old-space-size=4096 app.js

Системный файл для PM2

sudo nano /etc/systemd/system/node-app.service

Содержимое:

[Unit]
Description=Node.js Application
After=network.target

[Service]
Type=forking
User=nodeuser
WorkingDirectory=/opt/myapp
Environment=NODE_ENV=production
Environment=PORT=3000
ExecStart=/usr/local/bin/pm2 start ecosystem.config.js --no-daemon
ExecReload=/usr/local/bin/pm2 reload ecosystem.config.js
ExecStop=/usr/local/bin/pm2 kill
Restart=always
RestartSec=10

[Install]
WantedBy=multi-user.target
sudo systemctl enable node-app
sudo systemctl start node-app
sudo systemctl status node-app

Мониторинг и отладка

Установка инструментов мониторинга

npm install -g clinic
npm install -g autocannon

clinic doctor -- node app.js

autocannon http://localhost:3000

Профилирование памяти

node --inspect app.js

node --inspect-brk app.js

npm install -g @mapbox/node-pre-gyp

Обновление Node.js

Через NVM

nvm install node --reinstall-packages-from=node

nvm install --lts --reinstall-packages-from=node

Через системный пакетный менеджер

sudo apt update && sudo apt upgrade nodejs

sudo dnf update nodejs
Версии

Используйте LTS версии Node.js для продакшена и последние версии для разработки новых функций.

Безопасность

Регулярно обновляйте Node.js и зависимости, используйте npm audit для проверки уязвимостей.