[[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)