Кераван перайшчыня на NestJS 12: ESM, стандартныя схемы та можлівасць стежэння
Шырокі практычны кераван раскладвае основныя змены NestJS 12 – пакеты ESM, пераверкі стандартных схем, вбудованая можлівасць стежэння за роботайом програмы, а таксама апдейты інструменту CLI – і паказвае, як безпечна перайсці на новую версію.
NestJS 12 ўжо выйшаў, і на вядомаць ад звычайных значных апдэйтаў, гэты выпуск не спрямованы на адну-едзиную ключоўную функцыю.
У замене ён адразу паўтарае вплыв на калькі асэнблегу NestJS, адным рухам падсылаючы іх у сучасны відэк стварэння бэкенду.
Сярод найзначнейшых апдэйтаў ёсць:
- Пакеты Nest тепер распространяюцца у формате ESM
- Параболка, створаная на адной засадзе Standard Schema
- Серыялізацыя, створаная на адной засадзе Standard Schema
- Вбудованая можлівасць адзоравання через
@nestjs/observe - Перапісаны NestJS CLI
- Падтрымка Rspack для новых структураў манорепа
- Vitest і oxlint ўключаюцца як стандарт у новых проектах
- Болей розумны выявленні суперсечных маршрутаў
- Коды абяктавання, якія можа параскладваць інструментарый
- Структураваная, зручная для апаратаў логгірацыя
Якщо вы вже підтримуєте кодаверс NestJS, існуе адзін момент, які можа негайна зняць усі падзеўкі:
Няма прычыны пераводзіць вашае дапраўленне на ESM толькі таму, што сам NestJS 12 распространяецца у формате ESM.
Гэты факт ператварае тое, што могла бы выглядаць як перашкоджаючая апдэйтаванне, у ўмову, якую можна застосоўваць у савам тэмпе.
NestJS 12 спрямованы на апштадненне фрамворку
NestJS шырока вжываецца для стварэння добра арганізаваных сервісаў бэкенду на базе Node.js і TypeScript.
Яго загальная структура не змянілася і застаецца впізнанай для всіх, хто яго раней вжываў:
NestJS 12 Is About Modernizing the Framework
NestJS has become one of the popular ways to build structured backend applications with Node.js and TypeScript.
Its architecture is familiar:
Змянілася толькі атмасфера Node.js-экосыстэмы.
Вжыванне ESM продовжае растаць у всім экосыстэме.
Бібліятэкі шыматоў, такія як Zod, здобываюць популярнасць.
Новейшыя, быстрэйшыя інструменты для пакетавання заменяюць старыя інструменты для будавання.
У процесе разработкі прозорасць практык все чырэй вважаюць прыоритетным аспектам, а не чымсь, што дадаецца пазней, калі сервіс вже запускаецца.
NestJS 12 фактычна адгукваецца да всіх эых тэндэнцый адразу.
Прыгожа зазначыць, што нічога з гэтаго не вымагае, каб існуючыя прыкладнікі адразу застосавалі все новае.
1. Основныя пакеты Nest тепер выдаваюцца у формате ESM
Мабыць, найболей зрозумелая змяна ў гэтым выласце — гэта тое, што основныя пакеты Nest тепер публікуюцца у формате ESM.
Якщо ваш проект пабудаваны на CommonJS, гэта можа здавацца патрэбам большай перапісвы.
На ўдачу, сучасныя версіі Node.js падтрымліваюць require(esm).
На практыцы гэта значыць, што большасць прыкладнікаў на CommonJS можа продавацься як і раней, без повной пераканвертавання ў ESM.
Напрыклад, гэты рядок все ўсё працюе так сама, як і раней:
const { NestFactory } = require('@nestjs/core');
Вам не трэба перапісваць яго так:
import { NestFactory } from '@nestjs/core';
Але NestJS 12 дзейсна падышае мінімальную версію Node.js, яка ўсё ж неабходна.
Конкрэтна, вам патрэбна адна з наступных версій:
Node.js 20.19+
or
Node.js 22.12+
Node.js 21.x явна не падтрымваецца.
Таму, прычымляючыся да залежнасцяў NestJS, спачатку пераканайцеся, якая версія Node.js у вас запускаецца:
node --version
Перакананне ў цым на ранніх этапах у вашай CI/CD-працэсе таксама є розумным заходам прытармоўкі.
2. Пераход на ESM — гэта выбор, а не выклік
Гэты момент трэба особліва падкресліць для команд, якія адтульнуют існуючыя проекты.
Тут відбуваюцца два окрэжныя пераходы.
Sам NestJS пераводзіць своі пакеты на формат ESM.
Аднак ваша аплікацыя не зобав’язана негайна пераходзіць на гэты формат.
Іншымі словамі, такая настройка є абсалютна правямою:
Existing CommonJS Application
↓
NestJS 12
↓
Continue running CommonJS
замест таго, каб быць прымушаным да:
CommonJS
↓
Rewrite everything
↓
ESM
↓
NestJS 12
Усё-такі, спецыяльныя інструменты для вашага проекту можа ўсё ж стварыць працяглівасці.
Варта пераканацца:
- спецыяльныя скрыпты Bootstrap
- канвеі стварэння
- засобы тэставання
- настройкі бандлера
- нестандартныя шаблоны імпорту
- інструменты, прыязначаны спецыяльна для CommonJS
Нават як сам NestJS працюе нормальна, скрыпт або інструмент, які вы викорыстоўваете ў іншых частках канвею, можа не працаваць.
3. Падтрымка стандартнага шымату зменяе прыемы верыфікацыі
Адным з найзначнейшых даданняў у NestJS 12 ёсць вбудованая падтрымка стандартнага шымату.
Якщо вы нешта час прабавалі працаваць з TypeScript, верагодна, вы стыкаліся з бібліятэкамі на кшталт Zod, Valibot або ArkType. Шырыя інструменты, якіе здольны выкарыстоўваць верыфікацыю пад час выканання, адночасна гармонійна інтегруюцца з перакананням типаў у TypeScript.
Історычная частка пакета NestJS базавалася на DTO-х, створаных на адміністрацыі класаў, у поўнасці разам з бібліятэкай class-validator. Такі падход досяглы і даўжа выкарыстоўваецца, яго не плануюць адменшаць. NestJS 12 проста додае альтэрнатыўны спосаб.
Усё гэта выглядае так у практыцы:
@Post()
create(
@Body({
schema: createUserSchema,
})
body: CreateUserDto,
) {
return this.usersService.create(body);
}
Пасля чаго яго налаштовваюць на глобальны рэжым:
app.useGlobalPipes(
new StandardSchemaValidationPipe(),
);
Калі гэта ўсталяна, сама схема бере на сябе задачу пераканання вхідных запытоў. Гэта особліва карысна, якщо ваш код вже выкарыстоўвае схемы з бібліятэкай Zod або іншай бібліятэкай, якая салідарна з стандартам Standard Schema.
4. Zod адразу інтегруецца з NestJS
Падазроўваючы, што у вас уже ёсць схема Zod, створаная так:
const createUserSchema = z.object({
name: z.string().min(1),
email: z.email(),
});
Уместа таго, каб дублюваць гэтую логіку ў окремы слой пераканання, спецыфічны для NestJS, можна безпасабліва падключыць існуючую схему працэсу запыту.
То ж самае стосуецца параметраў маршрута:
@Get(':id')
findOne(
@Param('id', {
schema: z.coerce
.number()
.int()
.positive(),
})
id: number,
) {
return this.usersService.findOne(id);
}
Это скарбуе павтарэнне логікі. У замян на тое, каб трэбаваць адзіны набор правіла верыфікацыі для кліента і адзіны — для сервера, команды можу дазеліцься адзінам шэмай, як толькі ўможлівяе іх настройка. Кроме таго, гэтыя шэмы таксама можу служыць для стварэння дакументацыі OpenAPI.
5. Стандартны шэм таксама прымаецца для выходных адпаведзяў
Верыфікацыя не обмежваецца там, што прыходзіць — важна таксама і тое, што выходзіць.
Разглядзім случай, калі канцэнтрык випадкова вяртае ўсё такое:
{
"id": 1,
"name": "John",
"passwordHash": "..."
}
Тэхнічна, хэндлер асьледзіў об’ект. Але гэты об’ект можа адкрываць больш мяжоў, чым планавалася API-контрактам.
Ёнколі гэта, NestJS 12 прыносіць StandardSchemaSerializerInterceptor, які перакантролюе і пераформатуе выходныя даны пры тым, як яны досягаюць кліента.
Напрыклад:
@UseInterceptors(
StandardSchemaSerializerInterceptor,
)
@SerializeOptions({
schema: userResponseSchema,
})
@Get(':id')
findOne(@Param('id') id: string) {
return this.usersService.findOne(id);
}
Рэзультатам ёсць пакрыцце пераканальнай проверкі на обох канцах цыклу запита:
Client
↓
Request
↓
Schema Validation
↓
Application
↓
Schema Serialization
↓
Response
↓
Client
Для служб, якія гэтым чынам ствараюцца на адміністрацыі API, такая сіметрыя ўсёлякі значны прагрэс.
6. Вбудованая можлівасць адзоравання за дапамою @nestjs/observe
NestJS 12 таксама адкрывае спецыяльны пакет для адзоравання:
@nestjs/observe
Тое, што яго адзінакоўвае, — гэта ўсведамленне пра внутраню структуру NestJS. Тыповы агент для манітарынгу бачыў бы толькі нешта такое:
POST /users
200
У працоўніку Nest, на адміністрацыі, можна распазнаць вышэйшыя элементы, такія як кантролеры, прадастчыкі, рэзалверы GraphQL, спожывачы канцэйнаў, заданні і мікросервісы.
Інструменты для адзоравання працуюць у калькіляванні розных сфер: HTTP, GraphQL, gRPC, мікросервісы, спожывачы канцэйнаў і заданні типу cron.
Мэтой ў тым, каб спостерагальнасць расследзіваць як частку жыцёвага циклу прыемлі, а не як элемент, дадзены званоўна на рэвэрсе HTTP-сервера.
7. Спостерагальнасць — гэта тое, чым павінны карабквацца QA-інжынеры
З точкі зору QA, гэты слой спостерагальнасці заслуговае на увагу.
Тэставанне не павінна завершвацца як толькі API адправляе адпаведны адказ:
200 OK
Є значэнне ў тым, каб зразумець, што на самай працэ падготовкі таго адказу насправды выйшло.
Рассмотрзіце запит, які праходзіць через систему так:
Request
↓
Controller
↓
Service
↓
Database
↓
External API
↓
Response
Якщо выкананне вызову займае тры секунды, сам статус 200 не розпаведае всіў правду.
Тое, што вы насправды хочаце знать, — гэта там, дзе прабылі тыя тры секунды.
Магчымыя прычыны включаюць:
- павільныя запыты да базы дадзеных
- затрымкі ад званоўнага API
- час, прабытый у логіцы прыемлі
Даныя аб стане системы даюць командам QA і інжынераў дадатковы слой паказанняў для роботы, спамагаючы з’ясаваць звязак між неудачамі тэстаў і рэальной працэю системы.
8. Пераканаленне конфігурацыі на стандартную схему
Работа з конфігурацыяй — ўсё тая ж сфера, якая праходзіць апдэйт.
У минулым багато прыкладаў NestJS выкарыстоввалі Joi для гэтага:
ConfigModule.forRoot({
validationSchema: schema,
});
У NestJS 12 пераканаленне конфігурацыі пераходзіць на стандартную схему.
Ось як гэта выглядае на практыцы:
ConfigModule.forRoot({
validationSchema: z.object({
NODE_ENV: z
.enum([
'development',
'production',
'test',
])
.default('development'),
PORT: z.coerce
.number()
.default(3000),
}),
});
Joi не быў адмовлены — існуючыя проекты можаюць продаваляваць яго выкарыстоўванне, але ім патрэбна будзе апградацыя да Joi 18 чы ранейшай версіі, а таксама пераказачыя настройкі спецыфічныя для бібліятэк пад:
validationOptions.libraryOptions
Гэта ў складзе шырэйшагіх прагненняў да стварэння спакойнай інтэрфейсу схемы ў всім екасистеме фрамворку.
9. Каналы, які суперчаць, тепер можна автаматычна выяўляць
Існуе тонкі недагэдж у дызайне API, які часта важка ўпазнаваць пакуль не спрычыніць проблем.
Падазроўваючы, што вы визначаеце гэтыя два обробнікі:
@Get(':id')
findOne() {}
@Get('me')
getCurrentUser() {}
Залежна ад таго, як вырашаюцься каналы і ў какім порядку яны заявлены, запит да:
/users/me
можа завершыцца падпаданнем під шаблон:
/users/:id
замест таго, каб прабіцца да спецыяльнага обробніка /me, як планавалася.
NestJS 12 дадаў функцыю діагностикі, якая можа быць увімкнутая для выяўлення такой неодназначнасці каналаў.
Вы ўвімкнуце яе так:
const app = await NestFactory.create(
AppModule,
{
routeConflictPolicy: {
duplicate: 'error',
shadow: 'warn',
},
routeResolutionStrategy:
'specificity',
},
);
Гэта дазволяе разработчыкам актыўна выяўляць неодназначныя правіла маршрутацыі, замест таго, каб пазнайсці ў яных праз заплутаны адпаведзь API пазней.
10. Коды выканання, якія машыны можаць рэальна адгукнуцца
Ішчырэ адно незначна дадатковая деталь можа стаць вельмі важлівайя для будзь-каго, хто выкарыстоўвае ваш API.
Возьмімо гэты эксцэпцыю:
throw new BadRequestException(
'Password is too weak',
);
Разработчык фронтэнду можа прагтусь працаваць безпосередна з тэкстам паведамлення:
if (message === 'Password is too weak') {
...
}
Такі падход є нестабільным, адколькі формулювання можа змяніцца.
Болей надзеяным спосабам є викорыстоўванне стабільнага коду каштоўкі:
throw new BadRequestException(
'Password is too weak',
{
errorCode: 'WEAK_PASSWORD',
},
);
Тады кліент можа пераканацца па гэтым коду:
WEAK_PASSWORD
замест таго, каб завісіць ад точнага формулювання паведамлення.
Гэта стае ўсё важлівейшым, калі API выкарыстоўваецца колькіма корыстувальнікамі, напрыклад:
- веб-фронтэнд
- мобільныя дапыткі
- API для партнераў
- внутраніяя службы
Усе яны можаць павергацца ў той самы стабільны ідэнтыфікатор каштоўкі, замест таго, каб аналізаваць чытальны для людзя тэкст.
Структураваная логгірацыя аптэмбавалася
У гэтым выданні таксама стало лепшае абходжэнне з логаванням.
Тепер вы можете запісаць ў такім формате:
logger.log(
'User created',
{
userId: 1,
email: 'foo@bar.com',
},
);
Аргумент об’екта спрацьвоўваецца як структурованыя даны, прыўязаныя да конкрэтнай лініі журналу, а не проста як дадатковы текст для выведання.
Калі увімкнуты режым выведання JSON, гэтыя структурованыя даны паказваюцца пад ключам params, або іх можна безпосередньа включыць у запис журналу за дапамогою опцыі flattenParams.
Гэта мае вельмі важлівое значэнне, якщо вашы журналы падаюць у систему монітарынгу або створэння картоў стану. У працоўным програмнам забезпечэнні можна выдаваць структурованыя записы, якія можна шукати та фільтруваць з самага пачатку, замест таго, каб выдаваць простыя строкі, якія праз кантрольную обработку.
Напрыклад, запис журналу можа выглядаць так:
{
"message": "User created",
"params": {
"userId": 1,
"email": "foo@bar.com"
}
}
Такі формат набаго лёгкій для запитаў, чым спробы выкарыстоўваць полі з простага текстовага поведамлення.
CLI пацелаваны занова
Інзмененне, якое таксама ўключанае ў гэты выпуск, — цэлая переработка CLI.
Яго база коду перанеслена на ESM. Набор тэстаў зменіўся з Jest на Vitest. Дадана павная перакрыцча команд CLI, а внутршняя структура команд перароблена са выкарыстоўваннем об’ектаў контэксту з типамі.
Усе гэта не павінна безпасабліва вплываць на код вашай аплікацыі. Але гэта сігнал таго, што працы над модернізацыяй не обмежваюцца самам часам выканання — інструменты і процес роботы развіяльніка таксама аптэматывуюцца.
nest upgrade спростоўвае шлях міграцыі
Пацелаваны CLI прывозіць новую команду:
nest upgrade
Перш чым ўжываць які-небудзь змянення, вы можете пераглядзець, што ўсё ж такі плануецца зменіць:
Before running it, you can preview the changes:
Гэта мае важнае значэнне, таму што падыш версіі часта зачыняецца з многамі маленькімі, несувязанымі деталямі налаштавання. Команда апгрэйда можа автаматычна кераваць такімі тэхнічнымі змянамі, як:
- падыш версій пакетаў
@nestjs/* - адчыненне налаштаванняў webpack
- замена GraphQL Playground на GraphiQL
- налаштаванне способу передачы дадзенняў у GraphQL
- адчыненне пакетаў, зв’язаных з NATS
- налаштаванне выкарыстоўвання
@nestjs/config - адчыненне залежнасцяў Jest
- адчыненне залежнасцяў Joi
Пасля завершэння ён выдрукоўвае падсумак таго, што было зменена автаматычна, і чаго яшчэ трэба пераканаліцца рукамі.
Нова створаныя проекты запускаюцца з савэцкіми стандартамі
Стварэнне абсалютна новага проекта з NestJS 12 тепер дае вам іншую пачатковую точку.
Новыя настройкі монорепаў за замовчаннем выбіраюць Rspack як інструмент для зборкі пакетаў. У новых проектах замест ESLint выкарыстоўваецца oxlint. Vitest тепер ёсць стандартным інструментам для адрабаткі тэстаў у проектах на базе ESM. Bun таксама прыймаецца як альтэратыва для калектара пакетаў, разам з існуючымі варыянтамі:
npm
yarn
pnpm
Нічыга з гэтага не зменяе існуючыя проекты у ретроактыўным спосабе — гэта важна. NestJS 12 проста задае болей савэцкі стандарт для всего, што будзе стварацца ў будучыні, але дозволяе вялікім проектам мігруваць у свой темп.
Наявнасць GraphQL выклікае пэўныя вопыты
Якщо вы запускаеце прыемлівку на базе GraphQL, ёсць задачы з міграцыяй, якія не трэба ігнораваць.
GraphiQL тепер заменяе GraphQL Playground як стандартны інструмент для рэзервнае копіювання коду. Што ўжо важлівей, падтрымка:
subscriptions-transport-ws
была цэлкам адмовілася. Ад вас чакаецца перайшоць на:
graphql-ws
Этыя два протаколы не сумежны між сабой на рэверскай гэтаве. Гэта значыць, што змена способу перадачы даных у вашам бэкендзе — не толькі змена, якая стосуецца самага бэкендза; всё, што викорыстоўвае гэтыя даны, таксама павінна быць аптэльнутая і працаваць пасля таго:
NestJS API
↓
GraphQL Subscription
↓
Web / Mobile Client
Аптэльнаванне толькі залежнасці на серверскай стороне не будзе достатнім, каб усё працавало ад початку да канца.
Падтрымка NATS таксама змінілася
Фрэймворк тепер заменяе пакет nats на:
@nats-io/transport-node
Якщо ваша аплікацыя безпосередна імпортуе стары пакет, вам павярбаецца аптэльнаваць як саму залежнасць, так і відпаведныя заповешчанні імпорту.
Таксама зменілася працэва з пакетамі: тэксты паданняў тепер серыяваны як строкі JSON, і будзь-які ваш адсерыявач, які вы напісалі, будзе отрымляць цэлы об’ект паведамлення NATS, а не паданне, якое вже было распарсавана. Вы можете прачытаць змест паданняяў за дапамою:
msg.json()
Якщо абмэнаванне є ключовай часткай вашай системы, гэта аспект, які варта спецыяльна узгадаць у планах тэстав інтеграцыі і регрэсіі.
17. Порядак хуков жыцёвага циклу змяніўся
Існуе ўжо адна іншая змена, якая паўтарае адхіленні, пов’язаная з хукамі жыцёвага циклу.
У NestJS 12 порядак запуску хуков жыцёвага циклу тепер залежыць ад таго, дзе компонент расположаны ў іерархіі.
Гэта мае значэнне, якщо ваша прыкладна програма выкарыстоўвае певную последовальнасьць пад час:
- ініцыялізаціі
- стартування
- закрыцьця
- распакоўкі
Падазром, што служба запускае ресурсы ў такой последовальнасьці:
Database
Queue
Cache
External API
І іншыя сервісы прыпускаюць, што адны з гэтых ресурсаў вялікай меры ўжо доступны. Пасля апгрэйда вам будзе неабходна пераканацца, што гэты прыпуск застаецца правядзячым.
Гэта самэй той тип змян, які не павінен обовязкова выражацца ў падбіях. Ваш проект можа скомпілявацца без адных бягункоў, пры тым як на час выканання будзе працаваць інакш.
18. Дапаможныя змены, пра якія варта знать
У гэтым выласці таксама ўключаныя калькі іншых налааджэнняў.
NestJS 12 таксама тычыцца:
- формату адпаведзей на памылкі верыфікацыі
- спосабу обробкі асобы гRPC
- падтрымкі рэгулярных выразаў у Kafka
- веб-сокетных шлюзаў з дыапазонам запитоў
- прычын, якія фіксуюцца пад час раз'язвання веб-сокетаў
- функцый прэ-запиту для мікросервісаў
- паводлівага завершэння роботы ў Express
- спосабу, яким ададаптар HTTP караце памылкі
Большая частка проектаў не будзе выкорыстоваць усі этыя функцыі. Але там, дзе ваша прыкладна програма паводліва залежыць ад аднай з гэтых функцый, варта дадаць спецыяльныя тэсты на регрэсію для яе.
19. На чым павінен сфокусавацца QA пасля апдэйта?
Гэты, мабыць, найважлівейшы пытанне, на якое трэба даць адказ.
Паказанне таго, што апдэйт важлівай часткі фреймворку праходзіць гладка, не павінна базавацца толькі на запуске:
npm test
У замен тэсты павінны быць разбітыя на адзінаковыя сферы.
API
Пераканацца, чы:
- працюе аутентыкацыя
- эфектывна автарызацыя
- правільна валідазія
- адпаведныя адповедзі на аберанціі
- правільна падборка маршрутаў
- серыялізацыя адповедзей
Канфігурацыя
Пераканацца, чы:
- ўсі неабходныя зменныкі сераўіса ўвесцены
- нетачныя значэнні не выкарыстоўваюцца
- выкорыстоўваюцься стандартныя значэнні
- канфігурацыя пад працэўную суперблоку правільная
- канфігурацыя пад тэставанне правільная
GraphQL
Калі гэта стосуецца:
- запыткі
- мутацыі
- падпісанні
- GraphiQL
- сумеснае працаванне з кліентамі
Мікросэрвісы
Калі гэта актуальна:
- NATS
- Kafka
- gRPC
- серыяванне паведамленняў
- перапрыбуткі
- обработка асаблівых ситуацыяў
Візуабельнасць
Якщо гэта увімкнута:
- трагі HTTP
- трагі GraphQL
- фонавыя заданні
- спожывачы аберанак
- памылкі
- заданні типу cron
Закрыцце
Пераканацца:
- обработка сігналу SIGTERM
- актыўныя запыткі
- з’язні з базай дадаў
- аберанакі
- фонавыя працоўнікі
Мета не ў тым, каб адпавесць на:
"Чы гэты прыстаўкі запускаецца?"
А ў тым, каб адпавесць на:
"Чы прыстаўкі все ўсё правільна функцыонуе на кожным значытным рубежы?"
20. Што гэты вылік значыць для роботы з аптэставанням
Існуе шырэйшы трэнд, які варта зазначыць.
Фрэймворкі стаюць все болей автаматызаванымі. Процесы верыфікацыі стаюць стандартызаванымі. Можлівасць абсалютнага стану системы ўтвараецца безпосередна ў самых фрэймворках. Журналы логаў за замовчаннем стаюць структураванымі. Конфлікты маршрутаў можна выявляць автаматычна. Інструменты для тэставання стаюць все болей швядкімі.
Нічыга з гэтага не пазбавляе нас апатэставання. Гэта толькі змінюе сферу, дзе аптэставанне прыносіць наўбольшую цяню.
Уместа таго, каб проста запытацца:
"Чы робіць гэты канец-тупункт сваю работу?"
Аптэставанне павінна все чыраз больш запытацца:
"Чы гэты контракт API яшчэ правільны?" "Чы можна спазірваць аберанціі?" "Чы правільна рэалізацыя правоў доступу?" "Чы памылкі ўможна прачытаць машынай?" "Чы правільна серыявацыя?" "Чы прыложэнне восстанавляецца так, як трэба?" "Чы гэта апдэйт змінюе існуючую працэзуру?"
Фреймворк можа сам аўтаматызаваць певныя перакананні. Але чалавек усё рава должен вырашыць, што саме трэба пераканаць.
21. Прапанованы пацёрк для міграцыі ў NestJS 12
Уместа таго, каб апдэйтаваць прыладунак безпосередна, спачатку пераканайцеся ў сваёй средзе:
node --version
Паказвае, чы вы знаходзіцеся на:
Node 20.19+
альбо:
Node 22.12+
Далей апдэйтаваце CLI:
npm i -g @nestjs/cli@latest
Паглядзіце, што будзе робіцца пад час міграцыі:
nest upgrade --dry-run
Аккуратна пераглядка выходных даных. Потым яе застосавайце:
nest upgrade
Пасля чаго запускайце:
npm test
разам з вашымі інтеграцыйнымі та канец-до-канца тэстамі.
Асаблівую увагу зверніце на будзь-яю функцыянальнасць, створаную на:
- GraphQL
- NATS
- пераканаленні настройкаў
- спецыяльныя каналы
- хакі жыцёвага циклу
- Webpack
- інструменты на базе CommonJS
Кожны з гэтых аспектаў мае аспекты міграцыі, якія варта пераканаліць окрема.
Заключныя меркі
NestJS 12 — гэта не проста дадагачанне ўтолькі яшчо адной функцыяй.
Гэта крок да супадання NestJS з ныякім напрамкам развіцця екасистемы Node.js та TypeScript.
ESM тепер ўжо ўключаны ў саму архітэктуру пакетаў.
Стандартная схема адкрывае фрамворк для викорыстання бібліятэкаў пераканалення, такіх як Zod, Valibot, ArkType і іншых.
Той самы экасистема схэм таксама можа быць выкарыстоўваная для серыявання.
Возможнасць абзірнае спостерэння тепер болей безпосередзя прыўязана да сэрцаўай структуры самага прыемніка Nest.
Командна рамка была перабудована на аднойчы новейшыя інструменты.
Rspack, Vitest, oxlint і Bun стаюць часткай таго, як выглядае сучасная настаўка NestJS.
У той жытак нічга з гэтага не вымагае, каб існуючыя прыемнікі заўтра ж зменілі ўсё.
Вы можете застацца з CommonJS.
Вы можаце продаважвацься на верыфікацыю на аднойчы класаў.
Пераход на Vitest чы oxlint не ёсць обавязковым адразу.
Гэтая гнучкасць, можна сказаць, ёсць найпрактычнейшым аспектам гэтага выласку.
NestJS 12 апцэнтавае фреймворк, не вымагаючы, каб кожны існуючы прыемнік адразу ж стаў сучасным.
Для разработчыкаў гэта абмавляецца ў большай свабоды выбіраць сопны темп.
Для інжынераў прабачання бягу значыць ўсё новае значныя апдэйтаванне фрэймворку, якое трэба пераканацца — не толькі на рывень коду, але і ў чысці API, інтэграцый, можлівасцяў адзоравання, настройкі і рэальнай працы ў продакшэне.
Саме тут апдэйтаванні фрэймворку стаюць цікавымі.
Змена номера версіі ў package.json — гэта простая частка.
Найважлівейшае — чы рэчыцынальна прылада продовжвае працаваць так, як ад яе спакульваліся ўсі, хто на яй робіць.
Супаўзяныя матэрыялы
- Адна схема Zod для React Frontend і Node Backend — Дазвольце дазнацца, як адна схема Zod можа пераканаць формы React, адпаведзі API, тэлы запытак Express і зменныя сераўісу, адночасна ствараючы адпаведныя типы TypeScript.