Node.JS Express-თან და Typescript-თან ერთად
დღესდღეობით საკმაოდ პუპულალური არჩევანია TypeScript-ის არსებობა JavaScript-ის პროექტებში რადგანაც გვაქვს რა შემოღებული ტიპები, ჩვენი კოდი ხდება ნაკლებად ბაგიანი, გვაქვს დამატებითი Feature-ები და ასევე შესანიშნავი autocomlete-ი.
შესაბამისად TypeScript საკმაოდ მძლავრი ხელსაწყოა დეველოპერის ხელსაწყოთა არსენალში.
მაგრამ, მაინც რა არის TypeScript?
TypeScript არის პროგრამირების ენა, რომელიც არის დაფუძნებული ჯავასკრიპტზე და რომელიც საბოლოო ჯამში მაინც ჯავასკრიპის სკრიპტად გარდაიქმნება რამეთუ ბრაუზერის ძრავებმა და ასევე Node-ის ძრავამ არ იცის TypeScript-ის კოდი შეუიარაღებელი თვალით როგორ წაიკითხონ და გადათარგმნონ მანქანურ ინსტრუქციებში.
🐶 Fun Fact: Microsoft-მა TypeScript იმიტომ შექმნა, რომ საკუთარ C# დეველოპერებს ჯავასკრიპტთან მუშაობა გაადვილებოდათ. ამიტომაც ტაიპსკრიპტი ძალიან გაქვს C#-ს.
იმისათვის, რომ TypeScript-ის კოდი გარდაიქმნას ჯავასკრიპტის კოდად TypeScript-ს აქვს საკუთარი compiler, რომელსაც აქვს უამრავი პარამეტრი, რომელიც შეგვიძლია "ვაწვალოთ" და მოვარგოთ ჩვენს პრეფერენციებს.
ჩვენს Node.JS - Express.JS პროექტში ტაიპსკრიპტის ინტეგრაციისათვის დაგვჭირდება ასევე პოპულალური პაკეტი Babel - რომლის მთავარი დანიშნულებაა ჯავასკრიპტის კოდის ტრანსფორმაცია ამა თუ იმ გზით(მაგალითად: ჩვენი ES6 კოდი, რომ გარდაიქმნას ყველა ბრაუზერზე მორგებულ კოდად - რომ ყველგან ისე მუშაობდეს ჩვენი კოდი როგორც გვაქვს ჩაფიქრებული, ასევე გვქონდეს backward compatibility)
ჩვენ ტაიპსკრიპტს გამოვიყენებთ Babel-ის მეშვეობით, რადგანაც მხოლოდ TypeScript-ის კომპილატორს აქვს რიგი ლიმიტაციები.
პროექტის შექმნა
მოდი შევქმნათ პატარა Express-ის პროექტი:
ახლაკი შევქმნათ src/server.ts ფაილი ჩვენს პროექტში და შიგნით ჩავწეროთ შემდეგი სკრიპტი:
ეს არის უბრალოდ პატარა ვებსაიტი, რომელიც რენდომ ანიმე გიფებს გაჩვენებს დარეფრეშებისას
TypeScript-ის კონფიგურაცია
ახლა კი ჩვენ გვჭირდება, რომ შევქმნათ TypeScript-ის კონფიგურაციის ფაილი შემდეგი ბრძანებით:
ჩვენ დაგვიგენერირდება default კონფიგურაცია, რომელიც ჩვენს პროექტს უნდა მოვარგოთ. რიგი ცვლილებების შემდგომ TypeScript-ის კონფიგურაცია tsconfig.json- შემდეგ სახეს მიიღებს:
ახლა ჩვენ თუ გავუშვებთ შემდეგ ბრძანებას:
ეს ბრძანება ტაიპსკრიპტის კონფიგურაციის მიხედვით შექმნის build ფოლდერს, რომელიც უკვე node-ის მიერ წაკითხვადია.
გავუშვათ node-ით დაკომპილირებული სკრიპტი:
და დავინახავთ, რომ ჩვენი აპლიკაცია მუშაობს:
მაგრამ, რეალურად ნახევარი საქმე გავაკეთეთ ჯერ, რადგანაც როდესაც შევცვლით ჩვენს ქოუდბეისს გვჭირდება, რომ ჩვენი TypeScript-ის ქოუდბეისი ხელახლა დაკომპილირდეს და ასევე დარეფრეშებისას ცვლილებაც დავინახოთ.
Babel-ის საჭიროება
ამის გაკეთება რეალურად ტაიპსკრიპტის კომპაილერითაც შეიძლება, მაგრამ რაღაც ნაკლი აქვს ტაიპსკრიპტს. მაგალითისათვის, თუ ჩვენი ქოუდბეისი შეიცავს არა .ts ფაილებსაც, მაგალითად swagger.yaml, html და css ფაილები და ა.შ. საბოლო build ფოლდერში მხოლოდ *.ts ფაილები მოხვდება.
ამისათვის საჭიროა, რომ გამოვიყენოთ Babel-ი. გვჭირდება, რიგი package-ები:
@babel/core - ძირეული babel-ის ფუნქციონალისთვის
@babel/cli - CLI, რომლითაც babel-ს ვეტყვით რა უნდა გააკეთოს
@babel/preset-env - პრესეტი, რომლის მეშვეობითაც ვეტყვით როგორ გადააკომპილიროს კოდი
babel-plugin-module-resolver - პლაგინი, რომლის საშუალებითაც შესაძლებელია გვქონდეს absolute import-ები
@babel/preset-typescript - პრესეტი, რომელიც იქნება შუამავალი babel-ს და ტაიპსკრიპტს შორის
დავაინსტალიროთ ყველა ეს ჩამოთვლილი ფექიჯი(ყველა არის dev dependency):
და ასევე შევქმნათ პროექტის root-ში babel-ის კონფიგურაციის ფაილი, რომელსაც დავარქმევთ babel.config.json-ს.
შიგნით კი შემდეგი კონფიგურაცია გავუწეროთ:
ამის შემდგომ package.json-ში ჩავამატოთ რამოდენიმე სკრიპტი, იმისათვის, რომ მარტივად გავუშვათ ჩვენი პროექტი საჭირო ვარიანტში:
ახლა თუ გავუშვებთ ბრძანებას:
ამ შემთხვევაში როცა კი რაიმე ცვლილებას შევიტანთ კოდში მაშინვე გადაკომპილირდება build ფოლდერში.
საბოლოო ცვლილებები
მაგრამ ამასთანავე გვჭირდება,რომ nodemon-ით გავუშვათ საბოლოო ჯავასკრიპტის ბილდი, რადგანაც ყოველ ცვლილებაზე nodemon-მა თავისით გადაარესტარტოს ჩვენი node-ის სერვერი.
მაგრამ რეალურად გამოდის, რომ გვჭირდება გვქონდეს გაშვებული ორი პროცესი:
babel - რომელიც აკონვერტირებს ჩვენს TypeScript-ის ქოუდბეიზს JavaScript-ის build ვარიანტად
nodemon - რომელიც build ფოლდერში გვაქვს გაშვებული და ნებისმიერ ცვლილებაზე არესტარტებს ჩვენს node-ის სერვერს, რომ ახალი ცვლილებები აღიქვას
შეგვიძლია, რომ ეს პროცესები ცალ-ცალკე გავუშვათ(ცალ-ცალკე ტერმინალის სესიაში) მაგრამ ისიც შეგვიძლია, რომ ერთდროულად გავუშვათ concurrently ფექიჯის დახმარებით 👊
ეს ორი ფექიჯიც დავაინსტალიროთ:
და ასევე package.json-ში ერთი სკრიპტიც ჩავამატოთ:
ახლა თუ გავუშვებთ npm run dev-ს უკვე ჩვენი დეველოპმენტ გარემო მზად იქნება, Voilla 😇
npm run build:prod - უნდა გავუშვათ, როდესაც პროდაქშენის ვერსია გვინდა დავბილდოთ
npm start - უნდა გავუშვათ პროდაქშენზე იმის შემდგომ რაც გავუშვებთ
npm run build:prod
-ს
აბა თქვენ იცით, ღმერთი თქვენსკენ 🐶
Last updated