Files
GKNB_MSTM071/Backend_ppt/Alapok/npm_package.tex
T
2026-01-27 19:27:14 +01:00

371 lines
9.9 KiB
TeX

\section{NPM Package Manager}
\subsection{}
\begin{frame}{Mi az npm?}
\begin{itemize}
\item \kiemel{Node Package Manager} - Node.js csomagkezelő
\item A világ legnagyobb szoftver registry-je (2+ millió csomag)
\item Node.js-szel együtt települ
\item Csomagok telepítése, kezelése, megosztása
\item Projekt függőségek kezelése
\end{itemize}
\vspace{0.5cm}
\begin{block}{Verziószám ellenőrzése}
\texttt{node --version} \hspace{1cm} \texttt{npm --version}
\end{block}
\vspace{0.3cm}
\begin{block}{Alternatívák}
\kiemelZ{yarn}, \kiemelZ{pnpm} - gyorsabb, hatékonyabb csomagkezelők
\end{block}
\end{frame}
\begin{frame}[fragile,shrink=10]{npm init - Projekt inicializálás}
\begin{block}{Interaktív projekt létrehozás}
\begin{lstlisting}[language=bash]
npm init
\end{lstlisting}
\end{block}
\begin{block}{Gyors inicializálás alapértelmezett értékekkel}
\begin{lstlisting}[language=bash]
npm init -y
# vagy
npm init --yes
\end{lstlisting}
\end{block}
\vspace{0.3cm}
\begin{alertblock}{Eredmény}
Létrejön a \kiemel{package.json} fájl, amely a projekt metaadatait tartalmazza
\end{alertblock}
\end{frame}
\begin{frame}[fragile,shrink=10]{package.json struktúra}
\begin{block}{Alapvető package.json}
\begin{lstlisting}[style=JavaScript, basicstyle=\tiny\ttfamily]
{
"name": "my-backend-app",
"version": "1.0.0",
"description": "Backend alkalmazas Node.js-sel",
"main": "index.js",
"scripts": {
"start": "node index.js",
"dev": "nodemon index.js",
"test": "jest"
},
"keywords": ["nodejs", "backend", "api"],
"author": "Magda Donat",
"license": "MIT",
"dependencies": {
"express": "^4.18.2"
},
"devDependencies": {
"nodemon": "^3.0.1"
}
}
\end{lstlisting}
\end{block}
\end{frame}
\begin{frame}[fragile,shrink=10]{Csomagok telepítése}
\begin{block}{Telepítés production függőségként}
\begin{lstlisting}[language=bash]
npm install express
# vagy rovidebben
npm i express
# Tobbe csomag egyszerre
npm install express prisma dotenv
\end{lstlisting}
\end{block}
\begin{block}{Telepítés development függőségként}
\begin{lstlisting}[language=bash]
npm install --save-dev nodemon
# vagy
npm i -D nodemon jest eslint
\end{lstlisting}
\end{block}
\begin{alertblock}{Mi a különbség?}
\textbf{dependencies:} éles környezetben is kell | \textbf{devDependencies:} csak fejlesztéshez
\end{alertblock}
\end{frame}
\begin{frame}[fragile,shrink=10]{Csomagok kezelése}
\begin{columns}
\begin{column}{0.5\textwidth}
\begin{block}{Telepítés specifikus verzióval}
\begin{lstlisting}[language=bash]
npm i express@4.18.0
# Legfrissebb verzio
npm i express@latest
\end{lstlisting}
\end{block}
\begin{block}{Globális telepítés}
\begin{lstlisting}[language=bash]
npm install -g nodemon
npm i -g typescript
\end{lstlisting}
\end{block}
\end{column}
\begin{column}{0.5\textwidth}
\begin{block}{Eltávolítás}
\begin{lstlisting}[language=bash]
npm uninstall express
npm un express
# Globalis eltavolitas
npm uninstall -g nodemon
\end{lstlisting}
\end{block}
\begin{block}{Frissítés}
\begin{lstlisting}[language=bash]
npm update
npm update express
\end{lstlisting}
\end{block}
\end{column}
\end{columns}
\end{frame}
\begin{frame}{Semantic Versioning (SemVer)}
\begin{block}{Verzió formátum: \kiemel{MAJOR.MINOR.PATCH}}
\texttt{1.2.3} $\rightarrow$ \kiemelN{1} (major) . \kiemelZ{2} (minor) . \kiemel{3} (patch)
\end{block}
\vspace{0.3cm}
\begin{itemize}
\item \kiemelN{MAJOR:} Nem kompatibilis API változások
\item \kiemelZ{MINOR:} Új funkciók, visszafelé kompatibilis
\item \kiemel{PATCH:} Hibajavítások, visszafelé kompatibilis
\end{itemize}
\vspace{0.5cm}
\begin{table}
\centering
\begin{tabular}{|l|l|}
\hline
\textbf{Jelölés} & \textbf{Jelentés} \\
\hline
\texttt{1.2.3} & Pontosan 1.2.3 verzió \\
\hline
\texttt{\textasciicircum1.2.3} & $\geq$ 1.2.3 és $<$ 2.0.0 (MINOR frissítések) \\
\hline
\texttt{\textasciitilde1.2.3} & $\geq$ 1.2.3 és $<$ 1.3.0 (PATCH frissítések) \\
\hline
\texttt{*} vagy \texttt{latest} & Legfrissebb verzió \\
\hline
\end{tabular}
\end{table}
\end{frame}
\begin{frame}[fragile,shrink=10]{npm scripts}
\begin{block}{Scripts definiálása package.json-ben}
\begin{lstlisting}[style=JavaScript]
{
"scripts": {
"start": "node index.js",
"dev": "nodemon index.js",
"test": "jest",
"build": "tsc",
"lint": "eslint .",
"format": "prettier --write ."
}
}
\end{lstlisting}
\end{block}
\begin{block}{Scripts futtatása}
\begin{lstlisting}[language=bash]
npm run dev
npm run test
npm start # 'run' nelkul is mukodik (start, test, stop)
\end{lstlisting}
\end{block}
\end{frame}
\begin{frame}[fragile,shrink=10]{node\_modules és package-lock.json}
\begin{columns}
\begin{column}{0.5\textwidth}
\begin{block}{node\_modules}
\begin{itemize}
\item Telepített csomagok mappája
\item Nagyon nagy lehet (100+ MB)
\item \kiemel{Ne commitoljuk} git-be!
\item .gitignore-ba: \texttt{node\_modules/}
\item Újragenerálás: \texttt{npm install}
\end{itemize}
\end{block}
\end{column}
\begin{column}{0.5\textwidth}
\begin{block}{package-lock.json}
\begin{itemize}
\item Pontos verziókat rögzít
\item Függőségek fája
\item Determinisztikus telepítés
\item \kiemelZ{Commitoljuk} git-be!
\item Reprodukálható build-ek
\end{itemize}
\end{block}
\end{column}
\end{columns}
\vspace{0.5cm}
\begin{alertblock}{Fontos}
\texttt{npm install} a package-lock.json alapján telepít (ha létezik)
\end{alertblock}
\end{frame}
\begin{frame}[fragile,shrink=10]{Hasznos npm parancsok}
\begin{columns}
\begin{column}{0.5\textwidth}
\begin{block}{Információk lekérése}
\begin{lstlisting}[language=bash]
# Telepitett csomagok listaja
npm list
# Elavult csomagok
npm outdated
# Csomag informacio
npm info express
# Csomag keresese
npm search prisma
\end{lstlisting}
\end{block}
\end{column}
\begin{column}{0.5\textwidth}
\begin{block}{Karbantartás}
\begin{lstlisting}[language=bash]
# Cache torlese
npm cache clean --force
# Fuggosegek auditja
npm audit
# Sebezhetosegek javitasa
npm audit fix
# Projekt tisztitas
rm -rf node_modules
npm install
\end{lstlisting}
\end{block}
\end{column}
\end{columns}
\end{frame}
\begin{frame}[fragile,shrink=10]{npx - Csomag futtatás telepítés nélkül}
\begin{block}{npx használata}
\begin{lstlisting}[language=bash]
# Egyszeri futtatas telepites nelkul
npx create-react-app my-app
npx prisma init
npx tsx index.ts
# Lokalis csomag futtatas
npx nodemon index.js
\end{lstlisting}
\end{block}
\vspace{0.3cm}
\begin{block}{Előnyök}
\begin{itemize}
\item Nem szennyezi a globális telepítéseket
\item Mindig a legfrissebb verzió
\item Gyors prototípuskészítés
\item CLI eszközök futtatása
\end{itemize}
\end{block}
\end{frame}
\begin{frame}[fragile,shrink=10]{Gyakori csomagok Backend fejlesztéshez}
\begin{block}{Production dependencies}
\begin{lstlisting}[language=bash]
npm i express # Web framework
npm i @prisma/client # ORM kliens
npm i dotenv # Kornyezeti valtozok
npm i cors # CORS middleware
npm i bcrypt # Jelszo hash
npm i jsonwebtoken # JWT token
npm i express-validator # Validacio
\end{lstlisting}
\end{block}
\begin{block}{Development dependencies}
\begin{lstlisting}[language=bash]
npm i -D nodemon # Auto-restart
npm i -D prisma # ORM CLI
npm i -D typescript # TypeScript
npm i -D @types/node # Node.js tipusok
\end{lstlisting}
\end{block}
\end{frame}
\begin{frame}[fragile,shrink=10]{.npmrc - npm konfiguráció}
\begin{block}{Projekt .npmrc fájl}
\begin{lstlisting}[language=bash]
# Pontos verziot ment (^ nelkul)
save-exact=true
# Engine strict mod
engine-strict=true
# Automaikus audit
audit=true
\end{lstlisting}
\end{block}
\begin{block}{package.json - Node verzió megkötés}
\begin{lstlisting}[style=JavaScript]
{
"engines": {
"node": ">=18.0.0",
"npm": ">=9.0.0"
}
}
\end{lstlisting}
\end{block}
\end{frame}
\begin{frame}{npm Registry és publikálás}
\begin{itemize}
\item \kiemel{npmjs.com} - Publikus npm registry
\item Ingyenes, bárki publikálhat csomagot
\item Saját csomag publikálás: \texttt{npm publish}
\item Privát csomagok: fizetős npm Pro/Teams
\item Alternatív registry-k: GitHub Packages, Verdaccio
\end{itemize}
\vspace{0.5cm}
\begin{block}{Saját csomag publikálás lépései}
\begin{enumerate}
\item \texttt{npm login} - Bejelentkezés
\item package.json konfiguráció
\item \texttt{npm publish} - Publikálás
\item \texttt{npm version patch/minor/major} - Verziókezelés
\end{enumerate}
\end{block}
\end{frame}
\begin{frame}{Összefoglalás}
\begin{block}{npm alapok}
\begin{itemize}
\item npm: Node Package Manager, 2+ millió csomag
\item \texttt{npm init} - projekt inicializálás
\item \texttt{npm install/uninstall/update} - csomagkezelés
\item package.json: projekt metaadatok, függőségek, scripts
\item Semantic Versioning: MAJOR.MINOR.PATCH
\item dependencies vs devDependencies
\item node\_modules (ne commit), package-lock.json (commit)
\item npm scripts: egyéni parancsok definiálása
\item npx: csomagok futtatása telepítés nélkül
\end{itemize}
\end{block}
\end{frame}