[[oktatas:web:nodejs|< Node.js]]
====== Node.js telepítés ======
* **Szerző:** Sallai András
* Copyright (c) 2020, Sallai András
* Szerkesztve: 2020-2025
* Licenc: [[https://creativecommons.org/licenses/by-sa/4.0/|CC BY-SA 4.0]]
* Web: https://szit.hu
===== Bevezetés =====
A Node.js JavaScript futtató eszköz. Eredetileg szerveroldali használatra lett létrehozva.
Ajánlott az LTS verzió telepítése.
Kiadási táblázat:
* https://github.com/nodejs/release#release-schedule (2022)
===== Telepítés Linuxon =====
==== Telepítés Debian csomagból ====
apt install nodejs
apt install npm
Debian GNU/Linux rendszeren a Node.js a nodejs csomagból telepíthető.
Nem tévesztendő össze a node csomaggal, amely
**Amateur Packet Radio** Node programot tartalmazza. Utóbbi
rendszergazdaként a "node" paranccsal futtatható.
Ha csak a nodejs programot telepítjük, akkor létrehozhatunk
rá egy node nevű szimbolikus linket.
==== Legújabb telepítése ====
Debianos elérés:
* https://deb.nodesource.com/ (2024)
=== Telepítés előtt ===
apt install curl
Opcionális:
apt install gcc g++ make
=== Telepítés ===
curl -fsSL https://deb.nodesource.com/setup_16.x | bash -
apt update
apt install nodejs
A setup_16.x, a 2021-ben használható telepítő verziója.
Az aktuális verziót keressük az alábbi weblapok
egyikén:
* https://github.com/nodesource/distributions
* https://nodejs.org/en/download/package-manager/
2021-08-26-án Az Angular LTS kiadása 11.x. Ehhez kompatibilis a 10-s NodeJS.
==== Opcionális ====
apt install yarn
===== Telepítés Windowson =====
==== Chocolatey csomagkezelővel ====
choco install nodejs
==== Webhelyről ====
Töltsük le a weboldaláról:
* http://nodejs.org
Lehetőségünk van a következőkre:
| Windows Installer (.msi) | 32-bit | 64-bit |
| Windows Binary (.zip) | 32-bit | 64-bit |
A telepítős változat (.msi) beteszi a node parancsot az útvonalba.
===== Ellenőrzés =====
==== node parancs ====
Telepítés után ellenőrizzük a node parancs meglétét:
node --version
===== Helló Világ =====
Állomány szerkesztése:
nano hello.js
Tartalom:
console.log('Helló Világ');
Futtatás:
node hello.js
===== Az npm frissítése =====
Melyik verzió van a gépünkön?
npm -v
Melyik a legújabb kiadás:
* https://github.com/npm/cli
* Jobboldalon keressük a **Releases** részt.
Frissítés:
npm install -g npm@latest
Vagy:
npm install -g npm@next
===== Node.js frissítés =====
Használjuk az n modult vagy az nvm parancsot.
Cache frissítés:
npm cache clean -f
Az n modul telepítése:
npm install -g n
Frissítés rendszergazdaként:
n stable
===== Docker Composer =====
Legyen egy egyszerű HTTP szerver. Könyvtárszerkezet:
app01/
|-docker-compose.yaml
`-index.js
services:
node:
image: node
container_name: node1
working_dir: /home/node/app
environment:
- NODE_ENV=production
ports:
- 8000:8000
volumes:
- .:/home/node/app
command: ["node", "index.js"]
Indítás:
docker-compose up -d
vagy((Régebbi docker változatoknál a compose így volt elérhető: dockedr-compose. Újabban nem kell a kötőjel, mivel a composer egy bővítménye lett a docker prancsnak.)):
docker compose up -d
Forrás:
* https://www.docker.com/blog/how-to-use-the-node-docker-official-image/ (2024)
===== Docker compose függőséggel =====
Legyen a példa kedvéért egy olyan projekt, ahol függőség is van.
Egy express miniszervert fogunk készíteni.
Könyvtárszerkezet:
app01/
|-docker-compose.yaml
|-Dockerfile
|-index.js
`-package.json
Minimális package.json fájl:
{
"dependencies": {
"express": "^4.18.2"
}
}
A szerver:
const express = require('express');
const app = express();
app.get('/', (req, res) => {
res.send('helló')
});
app.listen(8000, () => {
console.log('Server is running on port 8000');
});
Kell egy Dockerfile, ahol telepítjük a függőségeket:
FROM node:22-alpine
WORKDIR /home/node/app
COPY package.json ./
RUN npm install
Indítás:
services:
node:
build:
context: .
dockerfile: Dockerfile
container_name: express1
environment:
- NODE_ENV=production
ports:
- 8000:8000
volumes:
- .:/home/node/app
- /home/node/app/node_modules
command: ["node", "index.js"]
Indítás:
docker compose up
Az environment jelenleg nincs használatban, csak egy példa.
===== Docker függőséggel =====
Composer nélkül dolgozunk, csak Dockerfile-t használunk.
{
"dependencies": {
"express": "^4.18.2"
}
}
A szerver:
const express = require('express');
const app = express();
app.get('/', (req, res) => {
res.send('helló')
});
app.listen(8000, () => {
console.log('Server is running on port 8000');
});
Kell egy Dockerfile, ahol telepítjük a függőségeket:
WORKDIR /home/node/app
COPY package.json ./
# Csak production függőségek telepítése
RUN npm install --omit=dev
COPY . .
EXPOSE 8000
CMD ["node", "index.js"]
Képfájl (image) létrehozása express-app néven:
docker build -t express-app .
Konténer futtatása a képfájl alapján:
docker run -p 8000:8000 --name express1 express-app
===== Fejlesztés Node.js nélkül =====
A következő példában csak a Docker konténerben van Node.js telepítve, de a fejlesztés
a host gépen ((A host gép, amin fut a konténer)) fut.
A 22-s Node.js verziót szeretnénk használni.
Könyvtár szerkezet:
projekt01/
|-app/
| `-index.js
|-docker-compose.yml
|-Dockerfile
`package.json
{
"scripts": {
"start": "node app/index.js"
},
"dependencies": {
"express": "^4.18.2"
}
}
const express = require('express');
const app = express();
app.get('/', (req, res) => {
res.send('helló')
});
app.listen(3000);
FROM node:22-alpine
COPY package.json ./
RUN npm install
services:
app-dev:
build:
context: .
dockerfile: Dockerfile
volumes:
- .:/app
- /app/node_modules
ports:
- "8000:3000"
command: ["npm", "start"]
Ebben az esetben a konténerben 3000-s porton fut az alkalmazást, de hoston 8000-s porton érhető el.
Teszteljünk egy HTTP klienssel:
res localhost:8000
==== Verzió ellenőrzése ====
const express = require('express');
const app = express();
app.get('/', (req, res) => {
res.send(process.version)
});
app.listen(3000);
==== nodemon használata ====
{
"scripts": {
"start": "npx nodemon app --watch app"
},
"dependencies": {
"express": "^4.18.2"
},
"devDependencies": {
"nodemon": "^2.0.20"
}
}
Próbáljuk ki a nodemon működését. Például tegyük többes számba a verziót, vagy adjunk
vissza valami más szöveget:
res.send(process.versions)