Node.js i TypeScript - jak zacz?

Podobne dokumenty
Patryk Jar Meet.js, Gdańsk 11 marca 2013 r. MODULARNY JAVASCRIPT

Narzędzia i aplikacje Java EE. Usługi sieciowe Paweł Czarnul pczarnul@eti.pg.gda.pl

Co to jest NODE.JS? Nowoczesne środowisko programistyczne

Bardzo szybkie wprowadzenie do Node.js

Programowanie obiektowe zastosowanie języka Java SE

Sposoby tworzenia projektu zawierającego aplet w środowisku NetBeans. Metody zabezpieczenia komputera użytkownika przed działaniem apletu.

Instrukcja tworzenia aplikacji EE na bazie aplikacji prezentowanej na zajęciach lab.4 z PIO umożliwiająca przez sieć dostęp wielu użytkownikom.

Materiały dla studentów Informatyki WSZiB w Krakowie

Laboratorium 1 Temat: Przygotowanie środowiska programistycznego. Poznanie edytora. Kompilacja i uruchomienie prostych programów przykładowych.

Java Platform Micro Edition

JavaScript po stronie serwera. Od tropienia mitów do implementacji

Wprowadzenie. 1. Terminal WebRTC. LABORATORIUM 5: WebRTC komunikacja między terminalami.

- dodaj obiekt tekstowy: /** Maciej */ Stage { title : "First JavaFX App" scene: Scene { width: 300 height: 300 content: [ ] } }

Aplikacje webowe z wykorzystaniem Node.js oraz Express

Wprowadzenie do tworzenia własnego modułu w kontrolerze Floodlight.

O sobie. Adam Kowalski. Absolwent informatyki Uniwersytetu Wrocławskiego Full-stack Developer w firmie Synergy Codes.

Tworzenie natywnych aplikacji na urządzenia mobilne - PhoneGap Tomasz Margalski

1. Czynności przygotowujące aplikację działającą na platformie Java SE Biblioteka5 (należy ją pobrać z załącznika z p.1)

Zaawansowane aplikacje WWW - laboratorium

Kurs programowania. Wykład 13. Wojciech Macyna. 14 czerwiec 2017

Programowanie obiektowe

Instrukcja instalacji oprogramowania dla środowiska Linux

Wykład 12. Programowanie serwera MS SQL 2005 w C#

Programowanie proceduralne w języku C++ Podstawy

Zaawansowane aplikacje internetowe - laboratorium

Instrukcja instalacji oprogramowania dla środowiska Linux

Wstęp. Ale po co? Implementacja

Tworzenie projektu zawierającego aplet w środowisku NetBeans. lab1. Dr inż. Zofia Kruczkiewicz Programowanie aplikacji internetowych

Instalacja oprogramowania Platforma Systemowa ArchestrA 2012 R2

Programowanie obiektowe. Literatura: Autor: dr inŝ. Zofia Kruczkiewicz

Podstawy programowania w języku JavaScript

Aplikacje RMI Lab4

Materiały dla studentów Informatyki WSZiB w Krakowie

Zaawansowane aplikacje internetowe - laboratorium Architektura CORBA.

JavaScript : programowanie zaawansowane / Tomasz "Comandeer" Jakut. Gliwice, cop Spis treści

Instalacja NOD32 Remote Administrator

JavaFX. Programowanie Obiektowe Mateusz Cicheński

INFORMATOR TECHNICZNY WONDERWARE

Rozproszony system kontroli wersji GIT. Piotr Macuk

Programowanie obiektowe

Wybrane działy Informatyki Stosowanej

Dotacje na innowacje. Inwestujemy w waszą przyszłość.

ZSBD ćwiczenie 4. Obiektowe systemy zarządzania bazą danych. Przygotowanie środowiska pracy. Wymagania: ZSBD ćwiczenie 4

Laboratorium Programowania Kart Elektronicznych

MeetingHelper. Aplikacja Android ułatwiająca przekazywanie materiałów pomiędzy uczestnikami spotkania. Instrukcja obsługi dla programisty

Testowanie II. Celem zajęć jest zapoznanie studentów z oceną jakości testów przy wykorzystaniu metryk pokrycia kodu testami (ang. code coverage).

Instrukcja instalacji oprogramowania dla środowiska Windows

1 Atrybuty i metody klasowe

1 Intefejsy graczne. 1.1 Okienka. 1.2 Komponenty

Zaawansowane aplikacje internetowe - laboratorium Web Services (część 1).

REST API w module kontrolera Floodlight. Implementacja kolektora statystyk OpenFlow.

Programowanie Komputerów

Programowanie RAD Delphi

T: Aktualizowanie systemów operacyjnych.

Interfejsy, klasy wewn trzne jako szczególny rodzaj obiektów

I. INSTALACJA BAZY DANYCH ORACLE10g EXPRESS EDITION

Wykorzystywanie parsera DOM w programach Java i PL/SQL

FLEX ( ) Przygotowanie środowiska developerskiego Hello world w MXML Hello world w ActionScript

Kurs programowania. Wykład 7. Wojciech Macyna. 25 kwietnia 2017

Komunikacja Człowiek-Komputer

Wieloplatformowe aplikacje sieciowe. dr inż. Juliusz Mikoda mgr inż. Anna Wawszczak

AXIS2 - tworzenie usługi sieciowej i klienta Axis Data Binding. dr inż. Juliusz Mikoda mgr inż. Anna Wawszczak

Implementacja aplikacji sieciowych z wykorzystaniem środowiska Qt

Obiektowe programowanie rozproszone Java RMI. Krzysztof Banaś Systemy rozproszone 1

C# 6.0 : kompletny przewodnik dla praktyków / Mark Michaelis, Eric Lippert. Gliwice, cop Spis treści

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

Podstawy programowania w Qt4

Wybrane działy Informatyki Stosowanej

Kurs programowania. Wykład 1. Wojciech Macyna. 3 marca 2016

INFORMATOR TECHNICZNY WONDERWARE

Jak okiełznać frontend w Django? Piotr Maliński

Framework Angular4. Alicja Frankowicz Weronika Węglińska

Zaawansowane aplikacje internetowe - laboratorium Architektura CORBA.

Instrukcja instalacji oprogramowania dla środowiska Linux

Instrukcja użytkownika Platforma transakcyjna mforex Trader dla systemu Linux

Automatyzacja procesu publikowania w bibliotece cyfrowej

Wprowadzenie do technologii JavaServer Faces 2.1 na podstawie

Zaawansowane Techniki WWW (HTML, CSS i NODE.JS)

Materiały oryginalne: ZAWWW-2st1.2-l11.tresc-1.0kolor.pdf. Materiały poprawione

Google Web Toolkit Michał Węgorek ZPO 2009

Popularne dostępne rozwiązania. Najpopularniejsze środowiska programistyczne:

Programowanie w Internecie. Java

Laboratorium 1. Wzorce oprogramowania lab1, Zofia Kruczkiewicz

Podstawy programowania. Ćwiczenie. Pojęcia bazowe. Języki programowania. Środowisko programowania Visual Studio

Instrukcja pomocnicza

MS Visual Studio 2005 Team Suite - Performance Tool

Full Stack JavaScript z Angular i Nest. Dni: 5. Opis: Adresaci szkolenia

Architektury Usług Internetowych. Laboratorium 2. Usługi sieciowe

Laboratorium Projektowania Systemów VLSI-ASIC Katedra Elektroniki Akademia Górniczo-Hutnicza

Programowanie obiektowe

Wzorce projektowe strukturalne cz. 1

LINUX. Instalacja oprogramowania

Architektura komunikacji

Podstawy modelowania w j zyku UML

Instrukcja instalacji oprogramowania dla środowiska MacOS

CI/CD - CO TO? PO CO? JAK?

Transkrypt:

Node.js i TypeScript - jak zacz? Adam Stolcenburg 22 listopada 2017 Akademia ADB

Node.js

Czym jest node.js? https://nodejs.org licencja MIT - https://github.com/nodejs/node dziaªa na Linux, macos, Solaris, FreeBSD, OpenBSD, Microsoft Windows komponenty skªadowe: V8 - silnik JavaScript wykorzystywany przez Chrome libuv - wieloplatformowa biblioteka ze wsparciem do asynchronicznych operacji wej±cia-wyj±cia http-parser c-ares OpenSSL zlib ponad 40 wbudowanych i 475,000 zewn trznych pakietów jednow tkowy, sterowany zdarzeniami model programowania 1

Jednow tkowy, sterowany zdarzeniami model programowania 2

Zastosowanie oprogramowanie serwerowe JavaScript po stronie serwera zdolny do obsªu»enia wielu tysi cy równolegªych poª cze«urz dzenia wbudowane brak konieczno±ci kompilacji ten sam kod mo»liwy do uruchomienia zarówno na PC jak i na urz dzeniu skrypty 3

Wydajno± zgrubsza (https://benchmarksgame.alioth.debian.org/u64q/javascript.html) wolniejszy ni» C++ wolniejszy ni» Java szybszy ni» Python w razie potrzeby mo»na u»y C++ - https://nodejs.org/api/addons.html 4

Wersje https://github.com/nodejs/release#release-schedule 5

Instalacja ¹ródªa oraz binarki do pobrania z ocjalnej strony: https://nodejs.org/en/download/ instalacja za pomoc managera pakietów: https://nodejs.org/en/download/package-manager/ Debian i Ubuntu: curl -sl https :// deb. nodesource. com / setup_8.x sudo -E bash - sudo apt - get install -y nodejs NVM (Node Version Manager) - https://github.com/creationix/nvm 6

Uruchamianie kodu JavaScript parametr uruchomienia node hello. js REPL - Read-Eval-Print-Loop $ node > console. log (` Hello ${ process. env. USER! `); skrypt #!/ usr / bin / env node console. log (` Hello ${ process. env. USER! `); 7

NPM - Node Package Manager mened»er pakietów JavaScript wspóªdziaªaj cy z rejestrem https://www.npmjs.com/ instalowanie, zarz dzanie zale»no±ciami npm install [ package [ @ version ]] npm install -g < package [ @ version ] > npm install -- save < package [ @version ]> npm install -- save - dev < package [ @version ]> publikowanie uruchamianie npm start npm run < script > tworzenie nowych pakietów/aplikacji npm init 8

package.json { " name ": "my - app ", " version ": " 1.0.0 ", " description ": "", " main ": " index. js ", " scripts ": { " start ": " node index. js ", " babel ": " babel index. js ", " author ": " Me ", " license ": " MIT ", " devdependencies ": { " babel - cli ": " ^6.26.0 ", " dependencies ": { " node - fetch ": " 1.7.3 " 9

Modularno± CommonJS (CJS), Asynchronous Module Design (AMD), ECMAScript 2015 (ES2015) rodzaje moduªów wbudowany pakiet - https://nodejs.org/dist/latest-v8.x/docs/api/ zewn trzny pakiet - https://www.npmjs.com/ plik katalog z plikiem index.js ªadowanie moduªów w node.js (CommonJS) const os = require ( 'os '); const local = require ( './ local '); 10

Modularno± wewn trz projektu cpus.js const os = require ( 'os '); function print () { console. log (`${ JSON. stringify ( os. cpus (), null, 2) `); console. log ( ' Hello from cpus. js! '); module. exports. print = print ; module. exports. get = os. cpus ; index.js const cpus = require ( './ cpus '); cpus. print (); console. log (`${ JSON. stringify ( require ( './ cpus '). get ()) `); 11

Synchroniczny model programowania const fs = require ( 'fs '); try { fs. writefilesync ( './ out. txt ', ' zapisany tekst '); const text = fs. readfilesync ( './ out. txt ', ' utf8 '); console. log ( text ); fs. unlinksync ( './ out. txt '); catch ( err ) { console. log (`${ err `); 12

Asynchroniczny model programowania - callback const fs = require ( 'fs '); fs. writefile ( './ out. txt ', ' zapisany tekst ', function ( err ) { if ( err ) return console. log (`${ err `); fs. readfile ( './ out. txt ', ' utf8 ', function ( err, text ) { if ( err ) return console. log (`${ err `); ); ); console. log ( text ); fs. unlink ( './ out. txt ', function ( err ) { if ( err ) return console. log (`${ err `); ); 13

Asynchroniczny model programowania - promise const promisify = require ( ' util '). promisify ; const fs = require ( 'fs '); promisify ( fs. writefile )( './ out. txt ', ' zapisany tekst '). then (() => { return promisify ( fs. readfile )( './ out. txt ', ' utf8 '); ). then ( text => { console. log ( text ); return promisify ( fs. unlink )( './ out. txt '); ). catch ( err => { console. log (`${ err `); ); 14

Asynchroniczny model programowania - async/await const promisify = require ( ' util '). promisify ; const fs = require ( 'fs '); async function print () { try { await promisify ( fs. writefile )( './ out. txt ', ' zapisany tekst '); let text = await promisify ( fs. readfile )( './ out. txt ', ' utf8 '); console. log ( text ); await promisify ( fs. unlink )( './ out. txt '); catch ( err ) { console. log (`${ err `); print (); 15

TypeScript

JavaScript ECMAScript - j zyk ustandaryzowany w specykacji ECMA-262 i ISO/IEC 16262 ECMAScript 3 (ES3) - 1999 ECMAScript 5 (ES5) - 2009/2011 http://kangax.github.io/compat-table/es5/ ECMAScript 2015 (ES2015, ES6) klasy i dziedziczenie funkcje strzaªkowe (ang. arrow functions) const i let obietnice (ang. promise objects) moduªy http://kangax.github.io/compat-table/es6/ ECMAScript 2017 (ES2017) funkcje asynchroniczne (ang. async functions) http://kangax.github.io/compat-table/es2016plus/ 16

TypeScript napisany i wspierany przez Microsoft - https://www.typescriptlang.org/ licencja Apache License 2.0 - https://github.com/microsoft/typescript nadzbiór j zyka JavaScript wsparcie dla kontroli typów interfejsy programowanie generyczne tuple przestrzenie nazw 17

Dziedziczenie w TypeScript class Base { protected value = 5; protected mult : number ; constructor ( private invalue : number, offset : number ) { this. mult = this. value * this. invalue + offset ; protected print (): void { console. log (` Base value ${ this. value `); class Derived extends Base { public printall (): void { this. print (); console. log (` Derived value ${ this. value * this. mult `); new Derived (10, 20). printall (); 18

Dziedziczenie w ES2015 class Base { constructor ( invalue, offset ) { this. invalue = invalue ; this. value = 5; this. mult = this. value * this. invalue + offset ; print () { console. log (` Base value ${ this. value `); class Derived extends Base { printall () { this. print (); console. log (` Derived value ${ this. value * this. mult `); new Derived (10, 20). printall (); 19

Dziedziczenie w ES5 i var Base = ( function () { function Base ( invalue, offset ) { this. invalue = invalue ; this. value = 5; this. mult = this. value * this. invalue + offset ; Base. prototype. print = function () { console. log (" Base value " + this. value ); ; return Base ; ()); var Derived = ( function ( _super ) { extends ( Derived, _super ); function Derived () { 20

Dziedziczenie w ES5 ii return _super!== null && _super. apply ( this, arguments ) this ; Derived. prototype. printall = function () { this. print (); console. log (" Derived value " + this. value * this. mult ); ; return Derived ; ( Base )); new Derived (10, 20). printall (); 21

Modularno± - TypeScript (ES2015) cpus.ts import * as os from ' os '; export function print (): void { console. log (`${ JSON. stringify ( os. cpus (), null, 2) `); console. log ( ' Hello from cpus. ts! '); export { cpus as get from ' os '; console. log ( 'os. arch () '); index.ts import * as cpus from './ cpus '; cpus. print (); console. log (`${ JSON. stringify ( cpus. get ()) `); 22

Kompilator napisany w TypeScript dost pny jako pakiet npm instalacja jako samodzielna aplikacja npm install -g typescript jako zale»no± projektu npm install -- save - dev typescript transpilacja tsc index. ts 23

Wa»ne opcje kompilatora -h, help wy±wietla pomoc -all wy±wietla szczegóªow pomoc init tworzy plik tscong.json -p FILE OR DIRECTORY, project FILE OR DIRECTORY pozwala wskaza katalog z którego ma by brana konguracja projektu -w, watch monitoruje i automatycznie transpiluje pliki.ts do.js -t VERSION, target VERSION pozwala zdniowa docelow wersj ECMAScript: ES3 (domy±lny), ES5, ES2015, ES2016, ES2017, ESNEXT -m KIND, module KIND pozwala zdeniowa rodziaj modularno±ci, jeden z: commonjs, amd, system, umd, es2015, ESNext -d, declaration generuje dodatkowo pliki.d.ts sourcemap generuje dodatkowo pliki.map strict bardziej rygorystyczna werykacja kodu 24

tscong.json { " compileroptions ": { " target ": " esnext ", " module ": " commonjs ", " sourcemap ": true, " outdir ": "./ out ", " rootdir ": "./ src ", " strict ": true Teraz wystarczy uruchomi : tsc -p. 25

Wspóªpraca z pakietami node.js informacje o typach moduªów wbudowanych w node.js dostarcza pakiet @types/node pakiety dostarczaj ce pliki.d.ts mog by u»ywane bezpo±rednio popularne pakiety posiadaj odpowiadaj ce im pakiety z typami w zakresie @types, na przykªad dla pakietu node-fetch denicja typu dostarczona jest za pomoc pakietu @types/node-fetch pozostaªe pakiety mo»na u»y : pisz c wªasn denicje typów - http://www.typescriptlang.org/docs/handbook/declaration-les/introduction.html bez informacji o typach 26

package.json wspóªpracuj cy z tscong.json { " name ": "my - app ", " version ": " 1.0.0 ", " description ": " My application ", " license ": " MIT ", " main ": "./ out / index. js ", " scripts ": { " start ": " node./ out / index. js ", " build ": " tsc -p.", " release ": " tsc -p. -- sourcemap false -- outdir./ release ", " author ": " Me ", " devdependencies ": { " @types / node ": " ^8.0.53 ", " typescript ": " ^2.6.1 " 27

Visual Studio Code

Visual Studio Code napisany i wspierany przez Microsoft - https://code.visualstudio.com/ ¹ródªa na licencji MIT - https://github.com/microsoft/vscode dziaªa na Linux, Microsoft Windows i macos doskonaªe wsparcie dla TypeScript napisany w TypeScript i JavaScript, korzysta z node.js do ±ci gni cia z https://code.visualstudio.com/ 28

Visual Studio Code - wsparcie dla TypeScript inteligentne uzupeªnianie kodu sprawdzanie poprawno±ci w czasie pisania transpilacja z poziomu edytora uruchamianie i debugowanie formatowanie refaktoryzacja integracja z GIT 29

Dzi kuj 29

Warto przeczyta Node.js Design Patterns - Second Edition, Mario Casciaro, Luciano Mammino https://www.typescriptlang.org/docs/home.html