Read-Eval-Print-Loop (REPL)
REPL - bu foydalanuvchi kiritgan buyruqlarni qabul qiladigan, ularni bajaradigan va natijani qaytaradigan sodda interaktiv muhit. REPL imkoniyati dependency graph'ingizni tekshiris
REPL - bu foydalanuvchi kiritgan buyruqlarni qabul qiladigan, ularni bajaradigan va natijani qaytaradigan sodda interaktiv muhit. REPL imkoniyati dependency graph'ingizni tekshirish va provider'lar (hamda controller'lar) metodlarini to'g'ridan-to'g'ri terminaldan chaqirishga imkon beradi.
Foydalanish
NestJS ilovangizni REPL rejimida ishga tushirish uchun yangi repl.ts faylini (main.ts bilan birga) yarating va unga quyidagi kodni yozing:
1import { repl } from '@nestjs/core';
2import { AppModule } from './src/app.module';
3
4async function bootstrap() {
5 await repl(AppModule);
6}
7bootstrap();Endi terminalda REPL'ni quyidagi buyruq bilan ishga tushiring:
1$ npm run start -- --entryFile replrepl Node.js REPL server obyektini qaytaradi.
Ishga tushgach, konsolda quyidagi xabarlarni ko'rishingiz kerak:
1LOG [NestFactory] Starting Nest application...
2LOG [InstanceLoader] AppModule dependencies initialized
3LOG REPL initializedShundan so'ng dependency graph bilan ishlashni boshlashingiz mumkin. Masalan, AppService ni olib (bu yerda starter project misol sifatida ishlatilgan) getHello() metodini chaqirishingiz mumkin:
1> get(AppService).getHello()
2'Hello World!'Terminal ichidan istalgan JavaScript kodini bajarishingiz mumkin. Masalan, AppController instansiyasini lokal o'zgaruvchiga yozib, asinxron metodni await bilan chaqirishingiz mumkin:
1> appController = get(AppController)
2AppController { appService: AppService {} }
3> await appController.getHello()
4'Hello World!'Berilgan provider yoki controller'dagi barcha public metodlarni ko'rsatish uchun methods() funksiyasidan foydalaning:
1> methods(AppController)
2
3Methods:
4 ◻ getHelloBarcha ro'yxatdan o'tgan modullarni controller va provider'lari bilan birga ro'yxat ko'rinishida chiqarish uchun debug() dan foydalaning.
1> debug()
2
3AppModule:
4 - controllers:
5 ◻ AppController
6 - providers:
7 ◻ AppServiceQisqa demo:
Oldindan taqdim etilgan native metodlar haqida ko'proq ma'lumotni quyidagi bo'limdan topasiz.
Native funksiyalar
O'rnatilgan NestJS REPL bir nechta native funksiyalar bilan keladi va ular REPL ishga tushganda global mavjud bo'ladi. Ularni ro'yxatlash uchun help() ni chaqiring.
Agar biror funksiya signature'ini (ya'ni qabul qiladigan parametrlar va qaytish turini) eslay olmasangiz, <function_name>.help ni chaqirishingiz mumkin.
Masalan:
1> $.help
2Retrieves an instance of either injectable or controller, otherwise, throws exception.
3Interface: $(token: InjectionToken) => anyBu funksiya interfeyslari TypeScript function type expression syntax da yozilgan.
| Function | Description | Signature |
|---|---|---|
debug | Barcha ro'yxatdan o'tgan modullarni controller va provider'lari bilan ro'yxat ko'rinishida chiqaradi. | debug(moduleCls?: ClassRef | string) => void |
get or $ | Injectable yoki controller instansiyasini oladi, aks holda exception tashlaydi. | get(token: InjectionToken) => any |
methods | Berilgan provider yoki controller'dagi barcha public metodlarni ko'rsatadi. | methods(token: ClassRef | string) => void |
resolve | Transient yoki request-scoped injectable/controller instansiyasini resolve qiladi, aks holda exception tashlaydi. | resolve(token: InjectionToken, contextId: any) => Promise<any> |
select | Modullar daraxti bo'ylab yurishga imkon beradi, masalan tanlangan moduldan muayyan instansiyani olish uchun. | select(token: DynamicModule | ClassRef) => INestApplicationContext |
Watch mode
Development vaqtida koddagi barcha o'zgarishlar avtomatik aks etishi uchun REPL'ni watch mode'da ishga tushirish foydali:
1$ npm run start -- --watch --entryFile replBunda bitta kamchilik bor: har bir reload'dan keyin REPL buyruqlar tarixi yo'qoladi va bu noqulay bo'lishi mumkin.
Yaxshiyamki, buning juda sodda yechimi bor. bootstrap funksiyasini quyidagicha o'zgartiring:
1async function bootstrap() {
2 const replServer = await repl(AppModule);
3 replServer.setupHistory(".nestjs_repl_history", (err) => {
4 if (err) {
5 console.error(err);
6 }
7 });
8}Endi tarix ishga tushirishlar va reload'lar orasida saqlanadi.