Pierwsze kroki
Instalacja pakietu, import w pliku middleware i pierwsza mapa tras - droga od pustego pliku do działającego łańcucha w kilka minut.
Instalacja i pierwsze uruchomienie
Zainstaluj pakiet
npm install @zanreal/nemoZaimportuj pakiet w pliku middleware
W Next.js 16 ten plik nazywa się proxy.ts, we wcześniejszych wersjach middleware.ts.
Jeśli jeszcze go nie masz, załóż go w katalogu głównym projektu.
import { createNEMO } from '@zanreal/nemo';
// [...]
import { createNEMO } from '@zanreal/nemo';
// [...]
Utwórz handler funkcją createNEMO
Na razie bez argumentów - konfigurację dołożysz w kolejnym kroku.
import { createNEMO } from '@zanreal/nemo';
export const proxy = createNEMO(/* your functions will go here */);
// [...]
import { createNEMO } from '@zanreal/nemo';
export const middleware = createNEMO(/* your functions will go here */);
// [...]
Opisz mapę middleware i przekaż ją do createNEMO
import { createNEMO, type MiddlewareConfig } from '@zanreal/nemo';
const middlewares: MiddlewareConfig = {
'/': [
async (request) => {
console.log('There is NEMO', request.nextUrl.pathname);
},
],
};
export const proxy = createNEMO(/* your functions will go here */);
export const proxy = createNEMO(middlewares);
// [...]
import { createNEMO, type MiddlewareConfig } from '@zanreal/nemo';
const middlewares: MiddlewareConfig = {
'/': [
async (request) => {
console.log('There is NEMO', request.nextUrl.pathname);
},
],
};
export const middleware = createNEMO(/* your functions will go here */);
export const middleware = createNEMO(middlewares);
// [...]
Od tej chwili każde żądanie do aplikacji zostawia w konsoli wpis There is NEMO.
Zawęź matcher, żeby middleware nie uruchamiał się przy każdym żądaniu
// [...]
export const config = {
matcher: ['/((?!_next/|_static|_vercel|[\\w-]+\\.\\w+).*)'],
};
// [...]
export const config = {
matcher: ['/((?!_next/|_static|_vercel|[\\w-]+\\.\\w+).*)'],
};
Taki wzorzec pomija cztery grupy ścieżek:
/_next/- wewnętrzne zasoby Next.js/_static- zawartość katalogu /public/_vercel- wewnętrzne zasoby Vercela- pliki z rozszerzeniem, czyli
/favicon.ico,/sitemap.xml,/robots.txti podobne
Wszystkie warianty matcher opisuje dokumentacja Next.js
Złóż wszystko w całość
import { createNEMO, type MiddlewareConfig } from '@zanreal/nemo';
const middlewares = {
'/': [
async (request) => {
console.log('There is NEMO', request.nextUrl.pathname);
},
],
} satisfies MiddlewareConfig;
export const proxy = createNEMO(middlewares);
export const config = {
matcher: ['/((?!_next/|_static|_vercel|[\\w-]+\\.\\w+).*)'],
};
import { createNEMO, type MiddlewareConfig } from '@zanreal/nemo';
const middlewares = {
'/': [
async (request) => {
console.log('There is NEMO', request.nextUrl.pathname);
},
],
} satisfies MiddlewareConfig;
export const middleware = createNEMO(middlewares);
export const config = {
matcher: ['/((?!_next/|_static|_vercel|[\\w-]+\\.\\w+).*)'],
};
Tak wygląda gotowy plik po wszystkich krokach.
Skąd wzięło się NEMO
Z Next.js pracuję od kilku lat. Kiedy Vercel zwinął pliki /**/_middleware.ts do jednego /middleware.ts w katalogu głównym, zniknął wygodny sposób trzymania logiki blisko tras, których dotyczy. Miało to być rozwiązanie tymczasowe. Na retrospektywie w 2023 roku doszedłem do wniosku, że nikt tej luki nie załatał, więc wziąłem się za to sam.
Zostawiam tę historię tutaj, bo warto pamiętać, od czego się zaczęło. Liczę na to, że NEMO oszczędzi Ci trochę czasu i poprawi DX w Twoim projekcie.
Czy ta strona była pomocna?
M↓obsługiwane.