{"id":4487,"date":"2016-12-31T16:47:33","date_gmt":"2016-12-31T14:47:33","guid":{"rendered":"https:\/\/www.tomislavstankovic.com\/blog\/?p=4487"},"modified":"2019-01-05T19:58:36","modified_gmt":"2019-01-05T17:58:36","slug":"postavljanje-angular2-typescript-projekta","status":"publish","type":"post","link":"https:\/\/www.tomislavstankovic.com\/blog\/postavljanje-angular2-typescript-projekta\/","title":{"rendered":"Postavljanje Angular 2 + TypeScript projekta"},"content":{"rendered":"<p>U ovom blog postu pro\u0107i \u0107u kroz proces postavljanja <em>Angular 2<\/em> projekta od nule. Za\u0161to od nule? Zato \u0161to mislim da je va\u017eno da prilikom postavljanja novog projekta znate za\u0161to ste ne\u0161to koristili unato\u010d \u010dinjenici da postoje automatski generatori koji \u0107e cijeli projekt postaviti za vas. <\/p>\n<p>Naravno, postoji i jednostavniji na\u010din koji \u0107u spomenuti na kraju blog posta, a mo\u017eda i napi\u0161em poseban blog post o tome ako netko izrazi \u017eelju u komentarima.<\/p>\n<p>Cilj ovog blog posta:<br \/>\n&#8211; Kreirati osnovnu strukturu tj. osnovne datoteke<br \/>\n&#8211; Dodati podr\u0161ku za <em>TypeScript<\/em><br \/>\n&#8211; Postaviti temelj za <em>Angular 2<\/em> i dodati <em>System.js<\/em><br \/>\n&#8211; I kona\u010dno, po\u010deti koristiti <em>Angular 2<\/em><\/p>\n<h2>I &#8211; Osnovna struktura<\/h2>\n<p>Zapo\u010det \u0107emo s kreiranjem mape <strong>Angular2-starter-projekt<\/strong>. <\/p>\n<p>I.I<\/p>\n<p>Unutar mape kreirat \u0107emo <strong>index.html<\/strong><\/p>\n<pre class=\"lang:xhtml decode:true \" >&lt;!DOCTYPE html&gt;\r\n&lt;html lang=\"hr\"&gt;\r\n&lt;head&gt;\r\n  &lt;meta charset=\"UTF-8\"&gt;\r\n  &lt;title&gt;Angular 2 - starter projekt&lt;\/title&gt;\r\n  &lt;!-- CSS --&gt;\r\n  &lt;link rel=\"stylesheet\" href=\"https:\/\/maxcdn.bootstrapcdn.com\/bootstrap\/3.3.7\/css\/bootstrap.min.css\"&gt;\r\n  &lt;!-- JS --&gt;\r\n \r\n&lt;\/head&gt;\r\n\r\n&lt;body&gt;\r\n   Angular 2 sadr\u017eaj.\r\n&lt;\/body&gt;\r\n&lt;\/html&gt;<\/pre>\n<p>I.II<\/p>\n<p>i <strong>package.json<\/strong> pomo\u0107u naredbe  <span class=\"lang:sh decode:true  crayon-inline \" >npm init &#8211;yes<\/span>.  <a href=\"https:\/\/docs.npmjs.com\/cli\/init\" target=\"_blank\">\u0160to je  <span class=\"lang:sh decode:true  crayon-inline \" >$ npm init<\/span>  i \u010demu slu\u017ei  <span class=\"lang:sh decode:true  crayon-inline \" >&#8211;yes<\/span>?<\/a><\/p>\n<pre class=\"lang:default decode:true \" >{\r\n  \"name\": \"Angular2-starter-projekt\",\r\n  \"version\": \"1.0.0\",\r\n  \"description\": \"\",\r\n  \"main\": \"index.js\",\r\n  \"scripts\": {\r\n    \"test\": \"echo \\\"Error: no test specified\\\" &amp;&amp; exit 1\"\r\n  },\r\n  \"keywords\": [],\r\n  \"author\": \"\",\r\n  \"license\": \"ISC\"\r\n}<\/pre>\n<p>Ve\u0107 sada mo\u017eemo otvoriti <strong>index.html<\/strong> u web pregledniku i vidjeti &#8220;Angular 2 sadr\u017eaj&#8221;. Za sada je to samo obi\u010dna HTML datoteka koju je potrebno osvje\u017eiti (F5) u web pregledniku prilikom svake promjene kako bi se one prikazale i daleko je od <em>Angular 2<\/em> aplikacije koju \u017eelimo napraviti.<\/p>\n<p>I.III<\/p>\n<p>Da bi to promijenili dodat \u0107emo <a href=\"https:\/\/github.com\/johnpapa\/lite-server\" target=\"_blank\">lite-server<\/a>, <a href=\"https:\/\/angular.io\/resources\/\" target=\"_blank\">prema preporuci angular.io resursa<\/a>, koji \u0107e slu\u017eiti za pokretanje aplikacije, automatsko otvaranje u web pregledniku i automatsko osvje\u017eavanje prilikom promjena u datotekama.<\/p>\n<p><strong>Lite-server<\/strong> dodajemo pomo\u0107u naredbe  <span class=\"lang:sh decode:true  crayon-inline \" >$ npm install lite-server &#8211;save-dev<\/span>. <\/p>\n<p><a href=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2016\/12\/npm-lite-server.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2016\/12\/npm-lite-server.jpg\" alt=\"NPM lite-server\" width=\"1100\" height=\"630\" class=\"aligncenter size-full wp-image-4504\" srcset=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2016\/12\/npm-lite-server.jpg 1100w, https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2016\/12\/npm-lite-server-300x172.jpg 300w, https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2016\/12\/npm-lite-server-768x440.jpg 768w, https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2016\/12\/npm-lite-server-1024x586.jpg 1024w\" sizes=\"auto, (max-width: 1100px) 100vw, 1100px\" \/><\/a><\/p>\n<p>Nakon instalacije mo\u017eemo primijetiti dvije stvari, a to su <strong>node_modules<\/strong> mapa, u kojoj \u0107e se nalaziti svi budu\u0107i <em>NPM<\/em> paketi, i promjena unutar <strong>package.json<\/strong> u kojemu se sada nalazi i informacija da na\u0161 projekt koristi lite-server.<\/p>\n<pre class=\"lang:default decode:true \" >\"devDependencies\": {\r\n    \"lite-server\": \"^2.2.2\"\r\n  }<\/pre>\n<p>Ako sada poku\u0161ate pokrenuti naredbu <span class=\"lang:sh decode:true  crayon-inline \" >$ npm run lite<\/span> dobit \u0107ete poruku o gre\u0161ci  <span class=\"lang:sh decode:true  crayon-inline \" >npm ERR! missing script: lite<\/span>  jer vam nedostaje jo\u0161 samo jedna sitnica unutar <strong>package.json<\/strong> koji sada treba izgledati ovako:<\/p>\n<pre class=\"lang:default mark:7,12-14 decode:true \" >{\r\n  \"name\": \"Angular2-starter-projekt\",\r\n  \"version\": \"1.0.0\",\r\n  \"description\": \"\",\r\n  \"main\": \"index.js\",\r\n  \"scripts\": {\r\n    \"lite\": \"lite-server\"\r\n  },\r\n  \"keywords\": [],\r\n  \"author\": \"\",\r\n  \"license\": \"ISC\",\r\n  \"devDependencies\": {\r\n    \"lite-server\": \"^2.2.2\"\r\n  }\r\n}<\/pre>\n<p>Projekt od sada pokre\u0107emo naredbom  <span class=\"lang:sh decode:true  crayon-inline \" >$ npm run lite<\/span>  te \u0107e se on automatski otvoriti u zadanom web pregledniku i osvje\u017eavati prilikom svake promjene.<\/p>\n<p><a href=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2016\/12\/npm-lite-server-file-changed.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2016\/12\/npm-lite-server-file-changed.jpg\" alt=\"NPM lite-server-file-changed\" width=\"459\" height=\"363\" class=\"aligncenter size-full wp-image-4513\" srcset=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2016\/12\/npm-lite-server-file-changed.jpg 459w, https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2016\/12\/npm-lite-server-file-changed-300x237.jpg 300w\" sizes=\"auto, (max-width: 459px) 100vw, 459px\" \/><\/a><\/p>\n<p>Trenutni izgled aplikacije<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2016\/12\/angular2-app-1.jpg\" alt=\"Angular2 starter app 1\" width=\"559\" height=\"122\" class=\"aligncenter size-full wp-image-4569\" srcset=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2016\/12\/angular2-app-1.jpg 559w, https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2016\/12\/angular2-app-1-300x65.jpg 300w\" sizes=\"auto, (max-width: 559px) 100vw, 559px\" \/><\/p>\n<p>Struktura projekta sada izgleda ovako:<\/p>\n<pre class=\"theme:familiar lang:default decode:true \" >| - Angular2-starter-projekt\/\r\n     | - node_modules\/\r\n          | - .bin\/\r\n          | - lite-server\/\r\n     | - index.html\r\n     | - package.json<\/pre>\n<h2>II &#8211; TypeScript<\/h2>\n<p><em>TypeScript<\/em> je superset <em>JavaScripta<\/em> i kada govorimo o <em>Angular 2<\/em> projektima gotovo je nemogu\u0107e prona\u0107i primjer gdje se <em>TypeScript<\/em> barem ne spominje kao opcija. Uglavnom, uz <em>TypeScript<\/em> dolazi puno <a href=\"https:\/\/www.mono.hr\/2016\/12\/15\/uvod-u-typescript-code-camp\/\" target=\"_blank\">prednosti<\/a> o kojima mo\u017eete ne\u0161to vi\u0161e saznati na <a href=\"https:\/\/www.typescriptlang.org\/\" target=\"_blank\">https:\/\/www.typescriptlang.org\/<\/a>. <\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2016\/12\/angular-io-typescript.jpg\" alt=\"angular.io TypeScript\" width=\"228\" height=\"194\" class=\"alignleft size-full wp-image-4517\" \/> <em>Angular 2<\/em> projekte mo\u017eete raditi i koriste\u0107i \u010disti <em>JavaScript<\/em>. Prilikom prou\u010davanja dokumentacije na <a href=\"https:\/\/angular.io\" target=\"_blank\">angular.io<\/a> u donjem lijevom uglu mo\u017eete odabrati koju vrstu dokumentacije \u017eelite vidjeti. Dokaz koliko <em>Angular<\/em> gura <em>TypeScript<\/em> je i taj \u0161to ako odaberete <em>JavaScript<\/em> u najve\u0107em broju slu\u010dajeva umjesto dokumentacije mo\u017eete vidjeti poruku &#8220;<em>This page is not yet available in JavaScript. We recommend reading <a href=\"https:\/\/angular.io\/docs\/ts\/latest\/tutorial\/toh-pt1.html\" target=\"_blank\">it in TypeScript<\/a>.<\/em>&#8220;.<\/p>\n<p>II.I<\/p>\n<p>No, vratimo se ovom projektu. Prije svega, trebamo dodati <a href=\"https:\/\/www.typescriptlang.org\/\" target=\"_blank\"><strong>TypeScript<\/strong><\/a> i <a href=\"https:\/\/github.com\/typings\/typings\" target=\"_blank\"><strong>Typings<\/strong><\/a> u projekt. <\/p>\n<p><em>TypeScript<\/em> slu\u017ei kao prevoditelj <a href=\"https:\/\/en.wikipedia.org\/wiki\/ECMAScript\" target=\"_blank\"><em>ES6<\/em> u <em>ES5<\/em><\/a> tj. <em>JavaScript<\/em> koji \u0107e web preglednik mo\u0107i razumjeti, a <em>Typings<\/em> je alat koji omogu\u0107ava <a href=\"https:\/\/www.npmjs.com\/package\/typings\" target=\"_blank\">dodavanje pro\u0161irenja<\/a> za <em>TypeScript<\/em>.<\/p>\n<p><a href=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2016\/12\/npm-typescript.gif\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2016\/12\/npm-typescript.gif\" alt=\"NPM Typescript\" width=\"1100\" height=\"653\" class=\"aligncenter size-full wp-image-4523\" \/><\/a><\/p>\n<p>Oboje ih mo\u017eemo istovremeno dodati u projekt naredbom<br \/>\n<span class=\"lang:sh decode:true  crayon-inline \" >$ npm install &#8211;save-dev typescript typings<\/span>.<\/p>\n<p>Promjena se odmah reflektira na <strong>package.json<\/strong> koji sada izgleda malo druga\u010dije:<\/p>\n<pre class=\"lang:sh mark:14-15 decode:true \" >{\r\n  \"name\": \"Angular2-starter-projekt\",\r\n  \"version\": \"1.0.0\",\r\n  \"description\": \"\",\r\n  \"main\": \"index.js\",\r\n  \"scripts\": {\r\n    \"lite\": \"lite-server\"\r\n  },\r\n  \"keywords\": [],\r\n  \"author\": \"\",\r\n  \"license\": \"ISC\",\r\n  \"devDependencies\": {\r\n    \"lite-server\": \"^2.2.2\",\r\n    \"typescript\": \"^2.1.4\",\r\n    \"typings\": \"^2.1.0\"\r\n  }\r\n}<\/pre>\n<p>II.II<\/p>\n<p>Sada mo\u017eemo kreirati <strong>tsconfig.json<\/strong> i <strong>typings.json<\/strong> prema uputama na <a href=\"https:\/\/angular.io\/docs\/ts\/latest\/guide\/typescript-configuration.html\" target=\"_blank\">https:\/\/angular.io\/docs\/ts\/latest\/guide\/typescript-configuration.html<\/a><\/p>\n<p><strong><a href=\"https:\/\/www.typescriptlang.org\/docs\/handbook\/tsconfig-json.html\" target=\"_blank\">tsconfig.json<\/a><\/strong> \u0107emo kreirati ru\u010dno i kopirati sljede\u0107e unutar datoteke:<\/p>\n<pre class=\"lang:default decode:true \" >{\r\n  \"compilerOptions\": {\r\n    \"target\": \"es5\",\r\n    \"module\": \"commonjs\",\r\n    \"moduleResolution\": \"node\",\r\n    \"sourceMap\": true,\r\n    \"emitDecoratorMetadata\": true,\r\n    \"experimentalDecorators\": true,\r\n    \"removeComments\": false,\r\n    \"noImplicitAny\": false\r\n   }\r\n}<\/pre>\n<p><strong>typings.json<\/strong> \u0107emo kreirati pomo\u0107u naredbe  <span class=\"lang:sh decode:true  crayon-inline \" >$ typings install dt~core-js dt~jasmine dt~node &#8211;save &#8211;global<\/span>, ali da ne bi dobili poruku o gre\u0161ci  <span class=\"lang:sh decode:true  crayon-inline \" >typings: command not found<\/span> prvo pokrenite naredbu  <span class=\"lang:sh decode:true  crayon-inline \" >$ npm install -g typings<\/span>.<\/p>\n<p>typings.json sada izgleda ovako:<\/p>\n<pre class=\"lang:sh decode:true \" >{\r\n  \"globalDependencies\": {\r\n    \"core-js\": \"registry:dt\/core-js#0.9.7+20161130133742\",\r\n    \"jasmine\": \"registry:dt\/jasmine#2.5.0+20161228223817\",\r\n    \"node\": \"registry:dt\/node#6.0.0+20161229171858\"\r\n  }\r\n}<\/pre>\n<p>Vra\u0107amo se opet na <strong>package.json<\/strong> kojemu \u0107emo re\u0107i koje skripte da pokrene prilikom startanja projekta.<\/p>\n<pre class=\"lang:sh mark:8-11 decode:true \" >{\r\n  \"name\": \"Angular2-starter-projekt\",\r\n  \"version\": \"1.0.0\",\r\n  \"description\": \"\",\r\n  \"main\": \"index.js\",\r\n  \"scripts\": {\r\n    \"lite\": \"lite-server\",\r\n    \"tsc\": \"tsc\",\r\n    \"tsc:w\": \"tsc -w\",\r\n    \"typings\": \"typings\",\r\n    \"postinstall\": \"typings install\"\r\n  },\r\n  \"keywords\": [],\r\n  \"author\": \"\",\r\n  \"license\": \"ISC\",\r\n  \"devDependencies\": {\r\n    \"lite-server\": \"^2.2.2\",\r\n    \"typescript\": \"^2.1.4\",\r\n    \"typings\": \"^2.1.0\"\r\n  }\r\n}<\/pre>\n<p>II.III<\/p>\n<p>Dodat \u0107emo jo\u0161 jedan modul u projekt tako da mo\u017eemo <a href=\"https:\/\/www.npmjs.com\/package\/concurrently\" target=\"_blank\">istovremeno pokrenuti<\/a> <strong>lite-server<\/strong> koji \u0107e u web pregledniku podi\u0107i projekt i <strong>typescript watch<\/strong> koji \u0107e pratiti promjene u .ts datotekama i kompajlirati ih u .js kako bi ih web preglednik mogao \u010ditati.<\/p>\n<p>Taj modul se zove <strong><a href=\"https:\/\/www.npmjs.com\/package\/concurrently\" target=\"_blank\">concurrently<\/a><\/strong> a instaliramo ga pomo\u0107u naredbe<br \/>\n<span class=\"lang:sh decode:true  crayon-inline \" >$ npm install concurrently &#8211;save-dev<\/span> <\/p>\n<p><a href=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2016\/12\/npm-start-concurrently.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2016\/12\/npm-start-concurrently.jpg\" alt=\"NPM: start concurrently\" width=\"980\" height=\"308\" class=\"aligncenter size-full wp-image-4542\" srcset=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2016\/12\/npm-start-concurrently.jpg 980w, https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2016\/12\/npm-start-concurrently-300x94.jpg 300w, https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2016\/12\/npm-start-concurrently-768x241.jpg 768w\" sizes=\"auto, (max-width: 980px) 100vw, 980px\" \/><\/a><\/p>\n<p>Nakon instalacije potrebno je jo\u0161 ubaciti sljede\u0107e u <strong>package.json<\/strong><\/p>\n<pre class=\"lang:default mark:2 decode:true \" >\"scripts\": {\r\n    \"start\": \"tsc &amp;&amp; concurrently \\\"npm run tsc:w\\\" \\\"npm run lite\\\"\",\r\n    \"lite\": \"lite-server\",\r\n    \"tsc\": \"tsc\",\r\n    \"tsc:w\": \"tsc -w\",\r\n    \"typings\": \"typings\",\r\n    \"postinstall\": \"typings install\"\r\n  },<\/pre>\n<p>Aplikaciju od sada pokre\u0107emo naredbom  <span class=\"lang:sh decode:true  crayon-inline \" >$ npm start<\/span>.<\/p>\n<p>Struktura projekta sada izgleda ovako:<\/p>\n<pre class=\"theme:familiar lang:default decode:true \" >| - Angular2-starter-projekt\/\r\n     | - node_modules\/\r\n          | - .bin\/\r\n          | - concurrently\/\r\n          | - lite-server\/\r\n          | - typescript\/\r\n          | - typings\/\r\n     | - index.html\r\n     | - package.json\r\n     | - tsconfig.json\r\n     | - typings.json <\/pre>\n<h2>III &#8211; Temelj za Angular 2 i System.js<\/h2>\n<p>Do sada smo postavili osnovnu strukturu budu\u0107eg starter projekta, dodali podr\u0161ku za <em>TypeScript<\/em> i sada je vrijeme da prije\u0111emo na <em>Angular 2<\/em>. Ipak, po\u0161to \u017eelimo koristiti napredne <em>ES6<\/em> mogu\u0107nosti koje web preglednici jo\u0161 uvijek ne podr\u017eavaju trebaju nam neki dodaci poput <a href=\"https:\/\/github.com\/zloirock\/core-js\" target=\"_blank\">Core JS Shim<\/a>, <a href=\"https:\/\/github.com\/angular\/zone.js\/\" target=\"_blank\">Zone.js<\/a>, <a href=\"https:\/\/github.com\/rbuckton\/ReflectDecorators\" target=\"_blank\">Reflect Metadata<\/a>, <a href=\"https:\/\/reactivex.io\/\" target=\"_blank\">RxJS<\/a> i SystemJS kako bi te prepreke zaobi\u0161li. <\/p>\n<p><a href=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2016\/12\/Angular2-QuickStart.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2016\/12\/Angular2-QuickStart-150x150.jpg\" alt=\"Angular2 QuickStart\" width=\"150\" height=\"150\" class=\"alignleft size-thumbnail wp-image-4548\" \/><\/a>Da ne bi bilo da sam ja to sada izmislio, info o tome se do prije mjesec dana mogla prona\u0107i u <a href=\"https:\/\/angular.io\/docs\/ts\/latest\/quickstart.html\" target=\"_blank\">slu\u017ebenoj Angular 2 dokumentaciji<\/a>. A ako bolje pogledate primijetit \u0107ete da se i dalje nalazi u <a href=\"https:\/\/github.com\/angular\/quickstart\/blob\/master\/index.html\" target=\"_blank\"><em>QuickStart seed<\/em> projektu unutar index.html<\/a>.<\/p>\n<p>III.I<\/p>\n<p>Potrebne dodatke dodat \u0107emo istovremeno u projekt pomo\u0107u naredbe<br \/>\n<span class=\"lang:sh decode:true  crayon-inline \" >$ npm install core-js reflect-metadata zone.js rxjs systemjs &#8211;save<\/span> <\/p>\n<p>I kao \u0161to mo\u017eete vidjeti <strong>package.json<\/strong> je postao bogatiji za <\/p>\n<pre class=\"lang:default decode:true \" > \"dependencies\": {\r\n    \"core-js\": \"^2.4.1\",\r\n    \"reflect-metadata\": \"^0.1.9\",\r\n    \"rxjs\": \"^5.0.2\",\r\n    \"systemjs\": \"^0.19.41\",\r\n    \"zone.js\": \"^0.7.4\"\r\n  }<\/pre>\n<p>III.II<\/p>\n<p>Sada mo\u017eemo dodati osnovne pakete koje \u0107emo koristiti u svim budu\u0107im <em>Angular 2<\/em> projektima, a koje ne bi mogli koristiti bez dodataka iz prethodnog koraka. Zna\u010di sada dodajemo sljede\u0107e pakete:<\/p>\n<ul>\n<li><a href=\"https:\/\/www.npmjs.com\/package\/@angular\/core\" target=\"_blank\">@angular\/core<\/a><\/li>\n<li><a href=\"https:\/\/www.npmjs.com\/package\/@angular\/common\" target=\"_blank\">@angular\/common<\/a><\/li>\n<li><a href=\"https:\/\/www.npmjs.com\/package\/@angular\/compiler\" target=\"_blank\">@angular\/compiler<\/a><\/li>\n<li><a href=\"https:\/\/www.npmjs.com\/package\/@angular\/platform-browser\" target=\"_blank\">@angular\/platform-browser<\/a><\/li>\n<li><a href=\"https:\/\/www.npmjs.com\/package\/@angular\/platform-browser-dynamic\" target=\"_blank\">@angular\/platform-browser-dynamic<\/a><\/li>\n<\/ul>\n<p>Istovremeno \u0107emo ih dodati u projekt naredbom<br \/>\n<span class=\"lang:sh decode:true  crayon-inline \" >$ npm install @angular\/core @angular\/common @angular\/compiler @angular\/platform-browser @angular\/platform-browser-dynamic &#8211;save<\/span> <\/p>\n<p>Osim tih osnovih paketa savjetujem da odmah dodate i sljede\u0107e jer te\u0161ko je zamisliti bilo kakav ozbiljan <em>Angular 2<\/em> projekt bez ovih paketa:<\/p>\n<p> <span class=\"lang:sh decode:true  crayon-inline \" >$ npm install @angular\/router @angular\/http @angular\/forms &#8211;save<\/span> <\/p>\n<ul>\n<li><a href=\"https:\/\/www.npmjs.com\/package\/@angular\/router\" target=\"_blank\">@angular\/router<\/a><\/li>\n<li><a href=\"https:\/\/www.npmjs.com\/package\/@angular\/http\" target=\"_blank\">@angular\/http<\/a><\/li>\n<li><a href=\"https:\/\/www.npmjs.com\/package\/@angular\/forms\" target=\"_blank\">@angular\/forms<\/a><\/li>\n<\/ul>\n<p>Promjena se odmah reflektira na <strong>package.json<\/strong>:<\/p>\n<pre class=\"lang:sh mark:2-9 decode:true \" > \"dependencies\": {\r\n    \"@angular\/common\": \"^2.4.1\",\r\n    \"@angular\/compiler\": \"^2.4.1\",\r\n    \"@angular\/core\": \"^2.4.1\",\r\n    \"@angular\/forms\": \"^2.4.1\",\r\n    \"@angular\/http\": \"^2.4.1\",\r\n    \"@angular\/platform-browser\": \"^2.4.1\",\r\n    \"@angular\/platform-browser-dynamic\": \"^2.4.1\",\r\n    \"@angular\/router\": \"^3.4.1\",\r\n    \"core-js\": \"^2.4.1\",\r\n    \"reflect-metadata\": \"^0.1.9\",\r\n    \"rxjs\": \"^5.0.2\",\r\n    \"systemjs\": \"^0.19.41\",\r\n    \"zone.js\": \"^0.7.4\"\r\n  }<\/pre>\n<p>III.III <\/p>\n<p><a href=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2016\/12\/angular-io-quick-start.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2016\/12\/angular-io-quick-start-150x150.jpg\" alt=\"Angular.io QuickStart\" width=\"150\" height=\"150\" class=\"alignleft size-thumbnail wp-image-4559\" \/><\/a>Sada nam treba <strong>System.js<\/strong> koji \u0107e <em>Angular 2<\/em> aplikaciji re\u0107i gdje se svi ranije instalirati paketi nalaze. Opet, da ne izmi\u0161ljamo toplu vodu jednostavno \u0107u kopirati sadr\u017eaj te datoteke iz <a href=\"https:\/\/github.com\/angular\/quickstart\" target=\"_blank\"><em>QuickStart seed<\/em> projekta<\/a>. Ina\u010de, i ovo se do prije koji tjedan nalazilo u slu\u017ebenoj <em>Angular 2<\/em> dokumentaciji. <\/p>\n<p>U mapi projekta kreiramo <strong>systemjs.config.js<\/strong> sa sljede\u0107im sadr\u017eajem:<\/p>\n<pre class=\"lang:js decode:true \" >\/**\r\n * System configuration for Angular 2 samples\r\n * Adjust as necessary for your application needs.\r\n *\/\r\n(function(global) {\r\n  \/\/ map tells the System loader where to look for things\r\n  var map = {\r\n    'app':                        'app',\r\n    '@angular':                   'node_modules\/@angular',\r\n    'angular2-in-memory-web-api': 'node_modules\/angular2-in-memory-web-api',\r\n    'rxjs':                       'node_modules\/rxjs'\r\n  };\r\n  \/\/ packages tells the System loader how to load when no filename and\/or no extension\r\n  var packages = {\r\n    'app':                        { main: 'main.js',  defaultExtension: 'js' },\r\n    'rxjs':                       { defaultExtension: 'js' },\r\n    'angular2-in-memory-web-api': { main: 'index.js', defaultExtension: 'js' },\r\n  };\r\n  var ngPackageNames = [\r\n    'common',\r\n    'compiler',\r\n    'core',\r\n    'forms',\r\n    'http',\r\n    'platform-browser',\r\n    'platform-browser-dynamic',\r\n    'router',\r\n    'router-deprecated',\r\n  ];\r\n  \/\/ Individual files (~300 requests):\r\n  function packIndex(pkgName) {\r\n    packages['@angular\/'+pkgName] = { main: 'index.js', defaultExtension: 'js' };\r\n  }\r\n  \/\/ Bundled (~40 requests):\r\n  function packUmd(pkgName) {\r\n    packages['@angular\/'+pkgName] = { main: 'bundles\/' + pkgName + '.umd.js', defaultExtension: 'js' };\r\n  }\r\n  \/\/ Most environments should use UMD; some (Karma) need the individual index files\r\n  var setPackageConfig = System.packageWithIndex ? packIndex : packUmd;\r\n  \/\/ Add package entries for angular packages\r\n  ngPackageNames.forEach(setPackageConfig);\r\n  var config = {\r\n    map: map,\r\n    packages: packages\r\n  };\r\n  System.config(config);\r\n})(this);<\/pre>\n<p>III.IV<\/p>\n<p>Vratimo se na <strong>index.html<\/strong> u koji \u0107emo sada dodati putanje do svega \u0161to smo dodali do sada.<\/p>\n<pre class=\"lang:xhtml mark:7-14 decode:true \" >&lt;head&gt;\r\n  &lt;meta charset=\"UTF-8\"&gt;\r\n  &lt;title&gt;Angular 2 - starter projekt&lt;\/title&gt;\r\n  &lt;!-- CSS --&gt;\r\n  &lt;link rel=\"stylesheet\" href=\"https:\/\/maxcdn.bootstrapcdn.com\/bootstrap\/3.3.7\/css\/bootstrap.min.css\"&gt;\r\n  &lt;!-- JS --&gt;\r\n  &lt;script src=\"node_modules\/core-js\/client\/shim.min.js\"&gt;&lt;\/script&gt;\r\n  &lt;script src=\"node_modules\/zone.js\/dist\/zone.js\"&gt;&lt;\/script&gt;\r\n  &lt;script src=\"node_modules\/reflect-metadata\/Reflect.js\"&gt;&lt;\/script&gt;\r\n  &lt;script src=\"node_modules\/systemjs\/dist\/system.src.js\"&gt;&lt;\/script&gt;\r\n  &lt;script src=\"systemjs.config.js\"&gt;&lt;\/script&gt;\r\n  &lt;script&gt;\r\n    System.import('app').catch(function(err) { console.error(err); });\r\n  &lt;\/script&gt;\r\n&lt;\/head&gt;<\/pre>\n<p>Struktura projekta sada izgleda ovako:<\/p>\n<pre class=\"theme:familiar lang:default mark:4,6,8-10,13,16 decode:true \" >| - Angular2-starter-projekt\/\r\n     | - node_modules\/\r\n          | - .bin\/\r\n          | - @angular\/\r\n          | - concurrently\/\r\n          | - core-js\/\r\n          | - lite-server\/\r\n          | - reflect-metadata\/\r\n          | - rxjs\/\r\n          | - systemjs\/\r\n          | - typescript\/\r\n          | - typings\/\r\n          | - zone.js\/\r\n     | - index.html\r\n     | - package.json\r\n     | - systemjs.config.js\r\n     | - tsconfig.json\r\n     | - typings.json <\/pre>\n<h2>IV &#8211; Napokon Angular 2<\/h2>\n<p>Sve do sada bilo je postavljanje projekta, s sada napokon mo\u017eemo zaroniti u <em>Angular 2<\/em>. U mapi projekta kreirati \u0107emo novu mapu koja \u0107e se zvati <strong>app<\/strong>. To je mapa s kojom \u0107emo u budu\u0107nosti najvi\u0161e raditi jer u njoj \u0107e se nalaziti sve ono \u0161to u kona\u010dnici \u010dini <em>Angular 2<\/em> aplikaciju.<\/p>\n<p>IV.I<\/p>\n<p>A mapi <strong>app<\/strong> kreirati \u0107emo datoteku <strong>app.component.ts<\/strong> te \u0107e se automatski kreirati <strong>app.component.js<\/strong> i <strong>app.component.js<\/strong>. Ako nisu samo pokrenite projekt koriste\u0107i <span class=\"lang:sh decode:true  crayon-inline \" >$ npm start <\/span>.<\/p>\n<p>IV.II<\/p>\n<p>Unutar <strong>app.component.ts<\/strong> kreirat \u0107emo prvu komponentu<\/p>\n<pre class=\"lang:js decode:true \" >import { Component } from '@angular\/core';\r\n\r\n@Component({\r\n  selector: 'my-app',\r\n  template: `\r\n    &lt;div class=\"jumbotron\"&gt;\r\n      &lt;h1&gt;Angular 2 sadr\u017eaj iz komponente!&lt;\/h1&gt;\r\n    &lt;\/div&gt;\r\n  `,\r\n  styles: [`\r\n    h1 { color: red; }\r\n  `]\r\n})\r\nexport class AppComponent {}<\/pre>\n<p>IV.III<\/p>\n<p>Sadr\u017eaj iz gornjeg H1 taga jo\u0161 uvijek se ne vidi na po\u010detnoj stranici projekta. Da bi se vidio potrebno je kreirati <strong>app.module.ts<\/strong> koji slu\u017ei kao centralno mjesto za sve <em>Angular 2<\/em> komponente koje onda mo\u017eemo koristiti kroz cijelu aplikaciju. <\/p>\n<pre class=\"lang:js decode:true \" >import { NgModule } from '@angular\/core';\r\nimport { BrowserModule } from '@angular\/platform-browser';\r\nimport { AppComponent } from '.\/app.component';\r\n\r\n@NgModule({\r\n  imports: [ BrowserModule\r\n],\r\n  declarations: [ AppComponent\r\n],\r\n  bootstrap: [ AppComponent ]\r\n})\r\nexport class AppModule {}<\/pre>\n<p>IV.IV<\/p>\n<p>I sada jo\u0161 to trebamo povezati sa ostatkom aplikacije. To \u0107emo napraviti tako da kreiramo <strong>main.ts<\/strong><\/p>\n<pre class=\"lang:js decode:true \" >import { platformBrowserDynamic } from '@angular\/platform-browser-dynamic';\r\nimport { AppModule } from '.\/app.module';\r\n\r\nplatformBrowserDynamic().bootstrapModule(AppModule);<\/pre>\n<p>IV.V<\/p>\n<p>I kona\u010dno. Sada mo\u017eemo prikazati sadr\u017eaj komponente na po\u010detnoj stranici aplikacije, a to \u010dinimo dodavanjem selektora  <span class=\"lang:js decode:true  crayon-inline \" >selector: &#8216;my-app&#8217;<\/span>  komponente  <span class=\"lang:js decode:true  crayon-inline \" >AppComponent<\/span>  u <strong>index.html<\/strong><\/p>\n<pre class=\"lang:xhtml mark:2 decode:true \" >&lt;body&gt;\r\n  &lt;my-app&gt;&lt;\/my-app&gt; \r\n&lt;\/body&gt;<\/pre>\n<p>Aplikacija sada izgleda ovako:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2016\/12\/angular2-app-2.jpg\" alt=\"Angular2 starter app 2\" width=\"560\" height=\"186\" class=\"aligncenter size-full wp-image-4568\" srcset=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2016\/12\/angular2-app-2.jpg 560w, https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2016\/12\/angular2-app-2-300x100.jpg 300w\" sizes=\"auto, (max-width: 560px) 100vw, 560px\" \/><\/p>\n<p>Trenutna struktura projekta:<\/p>\n<pre class=\"theme:familiar lang:default mark:2-11 decode:true \" >\r\n | - Angular2-starter-projekt\/\r\n     | - app\/\r\n          | - app.component.js\r\n          | - app.component.js.map\r\n          | - app.component.ts\r\n          | - app.module.js\r\n          | - app.module.js.map\r\n          | - app.module.ts\r\n          | - app.main.js\r\n          | - app.main.js.map\r\n          | - app.main.ts\r\n     | - node_modules\/\r\n          | - .bin\/\r\n          | - @angular\/\r\n          | - concurrently\/\r\n          | - core-js\/\r\n          | - lite-server\/\r\n          | - reflect-metadata\/\r\n          | - rxjs\/\r\n          | - systemjs\/\r\n          | - typescript\/\r\n          | - typings\/\r\n          | - zone.js\/\r\n     | - index.html\r\n     | - package.json\r\n     | - systemjs.config.js\r\n     | - tsconfig.json\r\n     | - typings.json <\/pre>\n<p>I to bi bilo to \u0161to se ti\u010de postavljanja starter <em>Angular 2<\/em> projekta. Imate sve \u0161to vam treba za sve budu\u0107e projekte i ne morate ovaj postupak ponovo prolaziti. Ipak, idemo jo\u0161 samo za kraj to malo uljep\u0161ati. <\/p>\n<p>IV.VI<\/p>\n<p>S obzirom da nam je prilikom rada na projektu najbitnija mapa <strong>app<\/strong> za kraj \u0107emo se fokusirati na nju i datoteke u njoj. Vjerujem da ste do sada ve\u0107 shvatili da su nam najbitnije .ts datoteke koje se automatski kompajliraju u js. i s obzirom da \u0107emo samo na njima raditi nema potrebe da nam i kompajlirane .js datoteke bezveze stoje u istoj mapi i smo prave gu\u017evu. Zato \u0107emo sada napraviti da se kompajlirane .js datoteke automatski spremaju u <strong>dist<\/strong> mapu koju \u0107emo sada kreirati.<\/p>\n<p>To \u0107emo posti\u0107i tako da <strong>tsconfig.json<\/strong> pod  <span class=\"lang:default decode:true  crayon-inline \" >&#8220;compilerOptions&#8221;<\/span> dodamo  <span class=\"lang:default decode:true  crayon-inline \" >&#8220;outDir&#8221;: &#8220;dist&#8221;<\/span> .<\/p>\n<p><a href=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2016\/12\/outdir-dist.gif\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2016\/12\/outdir-dist.gif\" alt=\"outdir dist\" width=\"728\" height=\"434\" class=\"aligncenter size-full wp-image-4572\" \/><\/a><\/p>\n<p>I zadnja stvar koju moramo napraviti kako bi <strong>dist<\/strong> mapa imala svoju svrhu je promijeniti  <span class=\"lang:default decode:true  crayon-inline \" >&#8216;app&#8217;:&#8217;dist&#8217;,<\/span>  u  <span class=\"lang:default decode:true  crayon-inline \" >&#8216;app&#8217;: &#8216;dist&#8217;,<\/span>  unutar <strong>systemjs.config.js<\/strong> tako da web preglednik zna iz koje mape \u0107e \u010ditati datoteke za prikaz aplikacije.<\/p>\n<p>I kona\u010dna struktura projekta izgleda ovako:<\/p>\n<pre class=\"theme:familiar lang:default mark:6-12 decode:true \" >\r\n | - Angular2-starter-projekt\/\r\n     | - app\/\r\n          | - app.component.ts\r\n          | - app.module.ts\r\n          | - app.main.ts\r\n     | - dist\/\r\n          | - app.component.js\r\n          | - app.component.js.map\r\n          | - app.module.js\r\n          | - app.module.js.map\r\n          | - app.main.js\r\n          | - app.main.js.map\r\n     | - node_modules\/\r\n          | - .bin\/\r\n          | - @angular\/\r\n          | - concurrently\/\r\n          | - core-js\/\r\n          | - lite-server\/\r\n          | - reflect-metadata\/\r\n          | - rxjs\/\r\n          | - systemjs\/\r\n          | - typescript\/\r\n          | - typings\/\r\n          | - zone.js\/\r\n     | - index.html\r\n     | - package.json\r\n     | - systemjs.config.js\r\n     | - tsconfig.json\r\n     | - typings.json <\/pre>\n<h2>Zaklju\u010dak<\/h2>\n<p>I to je sve! Imate spreman starter <em>Angular 2<\/em> + <em>TypeScript<\/em> projekt. Jednom kada ste ovo napravili spremite projekt na sigurno i koristite prilikom izrade svake sljede\u0107e <em>Angular 2<\/em> aplikacije kako bi si ubrzali posao. Naravno, mo\u017eete dodati ili oduzeti <em>NPM<\/em> module po \u017eelji ovisno o tome \u0161to sve \u017eelite imati u osnovi svake sljede\u0107e <em>Angular 2<\/em> aplikacije. <\/p>\n<p>Rekao sam na po\u010detku da \u0107u spomenuti br\u017ei na\u010din za stvaranje starter projekta, a to je koriste\u0107i <strong><a href=\"https:\/\/github.com\/angular\/angular-cli\" target=\"_blank\">Angular-CLI<\/a><\/strong> koji za vas kreira \u010ditav projekt spreman za kori\u0161tenje kroz samo nekoliko sekundi. Ipak, korisno je ovako rastran\u010dirati strukturu \u010disto da se bolje razumije od \u010dega se uop\u0107e i za\u0161to projekt sastoji.<\/p>\n<p>Koristite li <em>Angular 2<\/em> i <em>TypeScript<\/em>? Kakva su dosada\u0161nja iskustva?<\/p>\n","protected":false},"excerpt":{"rendered":"<p>U ovom blog postu pro\u0107i \u0107u kroz proces postavljanja Angular 2 projekta od nule. Za\u0161to od nule? Zato \u0161to mislim da je va\u017eno da prilikom postavljanja novog projekta znate za\u0161to ste ne\u0161to koristili unato\u010d \u010dinjenici da postoje automatski generatori koji \u0107e cijeli projekt postaviti za vas. Naravno, postoji i jednostavniji na\u010din koji \u0107u spomenuti na &hellip; <a href=\"https:\/\/www.tomislavstankovic.com\/blog\/postavljanje-angular2-typescript-projekta\/\" class=\"more-link\">Nastavi \u010ditati <span class=\"screen-reader-text\">Postavljanje Angular 2 + TypeScript projekta<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":4577,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"footnotes":""},"categories":[566,351],"tags":[372,373],"class_list":["post-4487","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-frontend","category-razvoj","tag-angular2","tag-typescript"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.9 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Postavljanje Angular 2 + TypeScript projekta - Tomislav Stankovi\u0107<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.tomislavstankovic.com\/blog\/postavljanje-angular2-typescript-projekta\/\" \/>\n<meta property=\"og:locale\" content=\"hr_HR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Postavljanje Angular 2 + TypeScript projekta - Tomislav Stankovi\u0107\" \/>\n<meta property=\"og:description\" content=\"U ovom blog postu pro\u0107i \u0107u kroz proces postavljanja Angular 2 projekta od nule. Za\u0161to od nule? Zato \u0161to mislim da je va\u017eno da prilikom postavljanja novog projekta znate za\u0161to ste ne\u0161to koristili unato\u010d \u010dinjenici da postoje automatski generatori koji \u0107e cijeli projekt postaviti za vas. Naravno, postoji i jednostavniji na\u010din koji \u0107u spomenuti na &hellip; Nastavi \u010ditati Postavljanje Angular 2 + TypeScript projekta\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.tomislavstankovic.com\/blog\/postavljanje-angular2-typescript-projekta\/\" \/>\n<meta property=\"og:site_name\" content=\"Tomislav Stankovi\u0107\" \/>\n<meta property=\"article:published_time\" content=\"2016-12-31T14:47:33+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2019-01-05T17:58:36+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2016\/12\/angular2-postavljanje-projekta.png\" \/>\n\t<meta property=\"og:image:width\" content=\"825\" \/>\n\t<meta property=\"og:image:height\" content=\"510\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Tomislav Stankovi\u0107\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Napisao\/la\" \/>\n\t<meta name=\"twitter:data1\" content=\"Tomislav Stankovi\u0107\" \/>\n\t<meta name=\"twitter:label2\" content=\"Procijenjeno vrijeme \u010ditanja\" \/>\n\t<meta name=\"twitter:data2\" content=\"12 minuta\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/postavljanje-angular2-typescript-projekta\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/postavljanje-angular2-typescript-projekta\\\/\"},\"author\":{\"name\":\"Tomislav Stankovi\u0107\",\"@id\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/#\\\/schema\\\/person\\\/0329c549c57700034ea77f5d3d78396d\"},\"headline\":\"Postavljanje Angular 2 + TypeScript projekta\",\"datePublished\":\"2016-12-31T14:47:33+00:00\",\"dateModified\":\"2019-01-05T17:58:36+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/postavljanje-angular2-typescript-projekta\\\/\"},\"wordCount\":1589,\"commentCount\":2,\"publisher\":{\"@id\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/#\\\/schema\\\/person\\\/0329c549c57700034ea77f5d3d78396d\"},\"image\":{\"@id\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/postavljanje-angular2-typescript-projekta\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/wp-content\\\/uploads\\\/2016\\\/12\\\/angular2-postavljanje-projekta.png\",\"keywords\":[\"Angular2\",\"TypeScript\"],\"articleSection\":[\"Frontend\",\"Razvoj\"],\"inLanguage\":\"hr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/postavljanje-angular2-typescript-projekta\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/postavljanje-angular2-typescript-projekta\\\/\",\"url\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/postavljanje-angular2-typescript-projekta\\\/\",\"name\":\"Postavljanje Angular 2 + TypeScript projekta - Tomislav Stankovi\u0107\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/postavljanje-angular2-typescript-projekta\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/postavljanje-angular2-typescript-projekta\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/wp-content\\\/uploads\\\/2016\\\/12\\\/angular2-postavljanje-projekta.png\",\"datePublished\":\"2016-12-31T14:47:33+00:00\",\"dateModified\":\"2019-01-05T17:58:36+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/postavljanje-angular2-typescript-projekta\\\/#breadcrumb\"},\"inLanguage\":\"hr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/postavljanje-angular2-typescript-projekta\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"hr\",\"@id\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/postavljanje-angular2-typescript-projekta\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/wp-content\\\/uploads\\\/2016\\\/12\\\/angular2-postavljanje-projekta.png\",\"contentUrl\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/wp-content\\\/uploads\\\/2016\\\/12\\\/angular2-postavljanje-projekta.png\",\"width\":825,\"height\":510,\"caption\":\"Postavljanje Angular 2 + TypeScript projekta\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/postavljanje-angular2-typescript-projekta\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Po\u010detna stranica\",\"item\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Postavljanje Angular 2 + TypeScript projekta\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/\",\"name\":\"Tomislav Stankovi\u0107\",\"description\":\"Sam svoj bloger\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/#\\\/schema\\\/person\\\/0329c549c57700034ea77f5d3d78396d\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"hr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/#\\\/schema\\\/person\\\/0329c549c57700034ea77f5d3d78396d\",\"name\":\"Tomislav Stankovi\u0107\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"hr\",\"@id\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/wp-content\\\/uploads\\\/2019\\\/10\\\/cropped-TomislavStankovic.jpg\",\"url\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/wp-content\\\/uploads\\\/2019\\\/10\\\/cropped-TomislavStankovic.jpg\",\"contentUrl\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/wp-content\\\/uploads\\\/2019\\\/10\\\/cropped-TomislavStankovic.jpg\",\"width\":248,\"height\":165,\"caption\":\"Tomislav Stankovi\u0107\"},\"logo\":{\"@id\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/wp-content\\\/uploads\\\/2019\\\/10\\\/cropped-TomislavStankovic.jpg\"},\"description\":\"Bloger \u0161irokog raspona interesa od kojih dio voli objaviti na ovom blogu. U neslobodno vrijeme Angular developer mobilnih i web aplikacija.\",\"sameAs\":[\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/\",\"https:\\\/\\\/www.linkedin.com\\\/in\\\/tomislavstankovic\\\/\"],\"url\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/author\\\/tomislavstankovic\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Postavljanje Angular 2 + TypeScript projekta - Tomislav Stankovi\u0107","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.tomislavstankovic.com\/blog\/postavljanje-angular2-typescript-projekta\/","og_locale":"hr_HR","og_type":"article","og_title":"Postavljanje Angular 2 + TypeScript projekta - Tomislav Stankovi\u0107","og_description":"U ovom blog postu pro\u0107i \u0107u kroz proces postavljanja Angular 2 projekta od nule. Za\u0161to od nule? Zato \u0161to mislim da je va\u017eno da prilikom postavljanja novog projekta znate za\u0161to ste ne\u0161to koristili unato\u010d \u010dinjenici da postoje automatski generatori koji \u0107e cijeli projekt postaviti za vas. Naravno, postoji i jednostavniji na\u010din koji \u0107u spomenuti na &hellip; Nastavi \u010ditati Postavljanje Angular 2 + TypeScript projekta","og_url":"https:\/\/www.tomislavstankovic.com\/blog\/postavljanje-angular2-typescript-projekta\/","og_site_name":"Tomislav Stankovi\u0107","article_published_time":"2016-12-31T14:47:33+00:00","article_modified_time":"2019-01-05T17:58:36+00:00","og_image":[{"width":825,"height":510,"url":"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2016\/12\/angular2-postavljanje-projekta.png","type":"image\/png"}],"author":"Tomislav Stankovi\u0107","twitter_card":"summary_large_image","twitter_misc":{"Napisao\/la":"Tomislav Stankovi\u0107","Procijenjeno vrijeme \u010ditanja":"12 minuta"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.tomislavstankovic.com\/blog\/postavljanje-angular2-typescript-projekta\/#article","isPartOf":{"@id":"https:\/\/www.tomislavstankovic.com\/blog\/postavljanje-angular2-typescript-projekta\/"},"author":{"name":"Tomislav Stankovi\u0107","@id":"https:\/\/www.tomislavstankovic.com\/blog\/#\/schema\/person\/0329c549c57700034ea77f5d3d78396d"},"headline":"Postavljanje Angular 2 + TypeScript projekta","datePublished":"2016-12-31T14:47:33+00:00","dateModified":"2019-01-05T17:58:36+00:00","mainEntityOfPage":{"@id":"https:\/\/www.tomislavstankovic.com\/blog\/postavljanje-angular2-typescript-projekta\/"},"wordCount":1589,"commentCount":2,"publisher":{"@id":"https:\/\/www.tomislavstankovic.com\/blog\/#\/schema\/person\/0329c549c57700034ea77f5d3d78396d"},"image":{"@id":"https:\/\/www.tomislavstankovic.com\/blog\/postavljanje-angular2-typescript-projekta\/#primaryimage"},"thumbnailUrl":"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2016\/12\/angular2-postavljanje-projekta.png","keywords":["Angular2","TypeScript"],"articleSection":["Frontend","Razvoj"],"inLanguage":"hr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.tomislavstankovic.com\/blog\/postavljanje-angular2-typescript-projekta\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.tomislavstankovic.com\/blog\/postavljanje-angular2-typescript-projekta\/","url":"https:\/\/www.tomislavstankovic.com\/blog\/postavljanje-angular2-typescript-projekta\/","name":"Postavljanje Angular 2 + TypeScript projekta - Tomislav Stankovi\u0107","isPartOf":{"@id":"https:\/\/www.tomislavstankovic.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.tomislavstankovic.com\/blog\/postavljanje-angular2-typescript-projekta\/#primaryimage"},"image":{"@id":"https:\/\/www.tomislavstankovic.com\/blog\/postavljanje-angular2-typescript-projekta\/#primaryimage"},"thumbnailUrl":"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2016\/12\/angular2-postavljanje-projekta.png","datePublished":"2016-12-31T14:47:33+00:00","dateModified":"2019-01-05T17:58:36+00:00","breadcrumb":{"@id":"https:\/\/www.tomislavstankovic.com\/blog\/postavljanje-angular2-typescript-projekta\/#breadcrumb"},"inLanguage":"hr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.tomislavstankovic.com\/blog\/postavljanje-angular2-typescript-projekta\/"]}]},{"@type":"ImageObject","inLanguage":"hr","@id":"https:\/\/www.tomislavstankovic.com\/blog\/postavljanje-angular2-typescript-projekta\/#primaryimage","url":"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2016\/12\/angular2-postavljanje-projekta.png","contentUrl":"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2016\/12\/angular2-postavljanje-projekta.png","width":825,"height":510,"caption":"Postavljanje Angular 2 + TypeScript projekta"},{"@type":"BreadcrumbList","@id":"https:\/\/www.tomislavstankovic.com\/blog\/postavljanje-angular2-typescript-projekta\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Po\u010detna stranica","item":"https:\/\/www.tomislavstankovic.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Postavljanje Angular 2 + TypeScript projekta"}]},{"@type":"WebSite","@id":"https:\/\/www.tomislavstankovic.com\/blog\/#website","url":"https:\/\/www.tomislavstankovic.com\/blog\/","name":"Tomislav Stankovi\u0107","description":"Sam svoj bloger","publisher":{"@id":"https:\/\/www.tomislavstankovic.com\/blog\/#\/schema\/person\/0329c549c57700034ea77f5d3d78396d"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.tomislavstankovic.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"hr"},{"@type":["Person","Organization"],"@id":"https:\/\/www.tomislavstankovic.com\/blog\/#\/schema\/person\/0329c549c57700034ea77f5d3d78396d","name":"Tomislav Stankovi\u0107","image":{"@type":"ImageObject","inLanguage":"hr","@id":"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/10\/cropped-TomislavStankovic.jpg","url":"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/10\/cropped-TomislavStankovic.jpg","contentUrl":"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/10\/cropped-TomislavStankovic.jpg","width":248,"height":165,"caption":"Tomislav Stankovi\u0107"},"logo":{"@id":"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/10\/cropped-TomislavStankovic.jpg"},"description":"Bloger \u0161irokog raspona interesa od kojih dio voli objaviti na ovom blogu. U neslobodno vrijeme Angular developer mobilnih i web aplikacija.","sameAs":["https:\/\/www.tomislavstankovic.com\/blog\/","https:\/\/www.linkedin.com\/in\/tomislavstankovic\/"],"url":"https:\/\/www.tomislavstankovic.com\/blog\/author\/tomislavstankovic\/"}]}},"_links":{"self":[{"href":"https:\/\/www.tomislavstankovic.com\/blog\/wp-json\/wp\/v2\/posts\/4487","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.tomislavstankovic.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.tomislavstankovic.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.tomislavstankovic.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.tomislavstankovic.com\/blog\/wp-json\/wp\/v2\/comments?post=4487"}],"version-history":[{"count":89,"href":"https:\/\/www.tomislavstankovic.com\/blog\/wp-json\/wp\/v2\/posts\/4487\/revisions"}],"predecessor-version":[{"id":4589,"href":"https:\/\/www.tomislavstankovic.com\/blog\/wp-json\/wp\/v2\/posts\/4487\/revisions\/4589"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.tomislavstankovic.com\/blog\/wp-json\/wp\/v2\/media\/4577"}],"wp:attachment":[{"href":"https:\/\/www.tomislavstankovic.com\/blog\/wp-json\/wp\/v2\/media?parent=4487"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.tomislavstankovic.com\/blog\/wp-json\/wp\/v2\/categories?post=4487"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.tomislavstankovic.com\/blog\/wp-json\/wp\/v2\/tags?post=4487"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}