Kutubxonalar
Ko'plab ilovalar bir xil umumiy muammolarni hal qilishi yoki modulli komponentdan turli kontekstlarda qayta foydalanishi kerak bo'ladi. Nestda buni hal qilishning bir nechta yo'li
Ko'plab ilovalar bir xil umumiy muammolarni hal qilishi yoki modulli komponentdan turli kontekstlarda qayta foydalanishi kerak bo'ladi. Nestda buni hal qilishning bir nechta yo'li bor, ammo har biri turli darajada ishlaydi va turli arxitektura hamda tashkilot ehtiyojlarini qondirishga yordam beradi.
Nest modules bitta ilova ichida komponentlarni ulashishni imkon qiladigan execution context taqdim etish uchun foydali. Modullarni npm orqali paketlab, turli loyihalarda o'rnatiladigan qayta foydalaniladigan kutubxonalar yaratish mumkin. Bu turli, o'zaro bo'sh bog'langan yoki umuman bog'lanmagan tashkilotlar tomonidan ishlatilishi mumkin bo'lgan sozlanadigan, qayta foydalaniladigan kutubxonalarni tarqatishning samarali usuli (masalan, 3rd party kutubxonalarni tarqatish/o'rnatish).
Bir-biriga yaqin tashkil etilgan guruhlar (masalan, kompaniya/loyiha chegaralarida) ichida kodni ulashish uchun komponentlarni bo'lishishda yengilroq yondashuv foydali bo'lishi mumkin. Monorepo shunday imkoniyatni ta'minlaydigan konstruktsiya sifatida paydo bo'lgan, va monorepo ichida kutubxona kodni oson, yengil usulda ulashish imkonini beradi. Nest monoreposida kutubxonalardan foydalanish umumiy komponentlarni bo'lishadigan ilovalarni oson yig'ishga imkon beradi. Aslida, bu monolitik ilovalarni va ishlab chiqish jarayonlarini modul komponentlarni qurish va kompozitsiya qilishga yo'naltirib, dekompozitsiyani rag'batlantiradi.
Nest kutubxonalari
Nest kutubxonasi Nest loyihasidir, u ilovadan farqli ravishda o'zicha ishlay olmaydi. Kutubxona kodi bajarilishi uchun uni tarkibiy ilovaga import qilish kerak. Bu bo'limda tasvirlangan kutubxonalar uchun built-in qo'llab-quvvatlash faqat monorepolar uchun mavjud (standart rejim loyihalar shunga o'xshash funksionallikka npm paketlari orqali erisha oladi).
Masalan, tashkilot barcha ichki ilovalarni boshqaradigan kompaniya siyosatlarini amalga oshirish orqali autentifikatsiyani boshqaradigan AuthModuleni ishlab chiqishi mumkin. Bu modulni har bir ilova uchun alohida qayta qurish yoki kodni npm bilan paketlab, har bir loyiha o'rnatishini talab qilish o'rniga, monorepo ichida ushbu modulni kutubxona sifatida aniqlash mumkin. Shunday tashkil etilganda, kutubxona modulining barcha iste'molchilari AuthModulening commit qilingan eng so'nggi versiyasini ko'radi. Bu komponentlarni ishlab chiqish va yig'ishni muvofiqlashtirish, hamda end-to-end testlarni soddalashtirish uchun sezilarli foyda keltirishi mumkin.
Kutubxonalar yaratish
Qayta foydalanishga mos har qanday funksionallik kutubxona sifatida boshqarish uchun nomzoddir. Nimalar kutubxona bo'lishi va nimalar ilova tarkibida bo'lishi - arxitektura dizayni bo'yicha qaror. Kutubxona yaratish mavjud ilovadan kodni shunchaki ko'chirishdan ko'proq narsani talab qiladi. Kutubxona sifatida paketlanganda, kutubxona kodi ilovadan ajratilishi kerak. Bu dastlab ko'proq vaqt talab qilishi va mahkam bog'langan kod bilan ishlaganda uchramaydigan ayrim dizayn qarorlarini talab qilishi mumkin. Ammo bu qo'shimcha mehnat kutubxona bir nechta ilovalar bo'ylab tezroq ilova yig'ishni ta'minlaganda o'zini oqlaydi.
Kutubxona yaratishni boshlash uchun quyidagi buyruqni ishga tushiring:
1$ nest g library my-libraryBuyruqni ishga tushirganda, library schematic sizdan kutubxona uchun prefix (AKA alias) so'raydi:
1What prefix would you like to use for the library (default: @app)?Bu ishchi maydonda my-library nomli yangi loyiha yaratadi.
Kutubxona turidagi loyiha ham, ilova turidagi loyiha kabi, schematic yordamida nomlangan papkaga generatsiya qilinadi. Kutubxonalar monorepo rootidagi libs papkasi ostida boshqariladi. Nest kutubxona birinchi marta yaratilganda libs papkasini yaratadi.
Kutubxona uchun generatsiya qilinadigan fayllar ilova uchun generatsiya qilinadigan fayllardan biroz farq qiladi. Yuqoridagi buyruqdan so'ng libs papkasining tarkibi quyidagicha bo'ladi:
nest-cli.json faylida kutubxona uchun yangi yozuv "projects" kaliti ostida paydo bo'ladi:
1...
2{
3 "my-library": {
4 "type": "library",
5 "root": "libs/my-library",
6 "entryFile": "index",
7 "sourceRoot": "libs/my-library/src",
8 "compilerOptions": {
9 "tsConfigPath": "libs/my-library/tsconfig.lib.json"
10 }
11}
12...nest-cli.json metadatasida kutubxonalar va ilovalar o'rtasida ikki farq bor:
- "type" propertysi "library"ga o'rnatiladi, "application" emas
- "entryFile" propertysi "index"ga o'rnatiladi, "main" emas
Bu farqlar build jarayonini kutubxonalar bilan to'g'ri ishlashga yo'naltiradi. Masalan, kutubxona funksiyalarini index.js fayli orqali eksport qiladi.
Ilova turidagi loyihalarda bo'lgani kabi, kutubxonalarning har birida root (monorepo darajasidagi) tsconfig.json faylini kengaytiradigan o'z tsconfig.lib.json fayli mavjud. Zarur bo'lsa, kutubxonaga xos compiler options taqdim etish uchun bu faylni o'zgartirishingiz mumkin.
Kutubxonani CLI buyrug'i bilan build qilishingiz mumkin:
1$ nest build my-libraryKutubxonalardan foydalanish
Avtomatik generatsiya qilingan konfiguratsiya fayllari mavjud bo'lsa, kutubxonalardan foydalanish juda oddiy. my-library kutubxonasidan MyLibraryServiceni my-project ilovasiga qanday import qilamiz?
Avvalo, kutubxona modullaridan foydalanish boshqa har qanday Nest modulidan foydalanish bilan bir xilligini esda tuting. Monorepo qiladigan ish - pathlarni shunday boshqaradiki, kutubxonalarni import qilish va buildlarni generatsiya qilish endi shaffof bo'ladi. MyLibraryServicedan foydalanish uchun uni e'lon qilgan modulni import qilishimiz kerak. Biz my-project/src/app.module.tsni quyidagicha o'zgartirib, MyLibraryModuleni import qilamiz.
1import { Module } from '@nestjs/common';
2import { AppController } from './app.controller';
3import { AppService } from './app.service';
4import { MyLibraryModule } from '@app/my-library';
5
6@Module({
7 imports: [MyLibraryModule],
8 controllers: [AppController],
9 providers: [AppService],
10})
11export class AppModule {}Yuqorida @app path aliasidan foydalanganimizni e'tibor qiling, bu nest g library buyrug'ida bergan prefix edi. Ichkarida Nest buni tsconfig path mapping orqali boshqaradi. Kutubxona qo'shilganda, Nest global (monorepo) tsconfig.json faylining "paths" kalitini quyidagicha yangilaydi:
1"paths": {
2 "@app/my-library": [
3 "libs/my-library/src"
4 ],
5 "@app/my-library/*": [
6 "libs/my-library/src/*"
7 ]
8}Xulosa qilib aytganda, monorepo va kutubxona funksiyalari kombinatsiyasi ilovalarga kutubxona modullarini kiritishni oson va intuitiv qiladi.
Xuddi shu mexanizm kutubxonalarni kompozitsiya qiladigan ilovalarni build qilish va deploy qilishga ham imkon beradi. MyLibraryModuleni import qilganingizdan so'ng, nest build barcha modul resolutionni avtomatik hal qiladi va deploy uchun ilova bilan birga kutubxona dependency'larini ham bundling qiladi. Monorepo uchun default compiler webpack, shuning uchun yakuniy distributsion fayl barcha transpilyatsiya qilingan JavaScript fayllarini bitta faylga yig'adi. Shuningdek, hereda tasvirlanganidek tscga o'tishingiz mumkin.