371 lines
9.9 KiB
TeX
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}
|