Blog (39)
Komentarze (405)
Recenzje (0)

Weści z frontu część 2 — Webpack

@molexorWeści z frontu część 2 — Webpack16.11.2016 21:47

W poprzednim wpisie podejmowaliśmy parę decyzji, dotyczących naszego wyimaginowanego projektu frontendowego. Dziś, umotywuję jedną z nich.

Bez zbędnych ceregieli, opisywania historii, wstępów i upiększeń. Przejdźmy do rzeczy. Co będziemy robić poprzez webpacka

  • Zarządzanie zależnościami
  • Budowanie paczki docelowej
  • Ładowanie obrazków , SASS-ów, fontów itd
  • Transpilacja
  • Serwer deweloperski i integracja z przeglądarkami

Zarządzanie zależnościami

Pytanie: jak dołączyć do projektu bibliotekę angular?

Dodać do HTML-a coś takiego:

<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.6/angular.min.js"></script>

Ok. Lub lokalnie

<script src="libs/angular.min.js"></script>

jeśli zainstalujemy angulara przez npm-a (bo bower już jest nie fajny)

<script src="node_modules/angular/angular.min.js"></script>

OK. Fajnie, ale oznacza to, że "na produkcje" musimy przenieść dokładnie taką strukturę katalogów. Co więcej zawartość katalogu node_modules jest większa niż nasze potrzeby:

-rw-rw-r-- 1 michal michal     343 lip 22 17:29 angular-csp.css
-rw-rw-r-- 1 michal michal 1187559 lip 22 17:29 angular.js
-rw-rw-r-- 1 michal michal  160048 lip 22 17:29 angular.min.js
-rw-rw-r-- 1 michal michal   56905 lip 22 17:27 angular.min.js.gzip
-rw-rw-r-- 1 michal michal  430959 lip 22 17:29 angular.min.js.map
-rw-rw-r-- 1 michal michal     133 lip 22 17:29 bower.json
-rw-rw-r-- 1 michal michal      48 lip 22 17:27 index.js
-rw-rw-r-- 1 michal michal    1074 lip 22 17:27 LICENSE.md
-rw-rw-r-- 1 michal michal    2396 lis  9 21:52 package.json
-rw-rw-r-- 1 michal michal    1885 lip 22 17:27 README.md

Będziemy potrzebować do tego narzędzia, ale musielibyśmy się trochę napocić z konfiguracją w większym projekcie.

OK. to zobaczmy jak to wygląda w webpacku

Tu jest inaczej. Mamy jeden pliczek główny(lub kilka, ale o tym może w następnym wpisie). Nazwijmy go index.js Od niego wszystko się zaczyna, jest punktem wejścia. A co w środku?

require("angular");

Tak. takie coś powinno dać radę(!!!!!) Zapewni że pliki angulara znajdą się w naszym projekcie, zostaną odpowiednio przetworzone i spakowane.

Tak postępujemy z bibliotekami. Podobnie załączamy inne nasze pliki, podając ścieżkę relatywną

require("./appModule.js");

Oczywiście nic nie stoi także na przeszkodzie, aby zależności umieszczać także w innych plikach niż plik główny. Utworzony w ten sposób łańcuch zależności zapewnia spójność aplikacji, ale także zapewnia że pliczki których nie chcemy, nigdy nie znajdą się w paczce. Mowa np. o plikach z testami.

Budowanie paczki docelowej[

Mamy łańcuch zależności, który zapewnia nam budowanie paczki. Tylko , co w tym wypadku oznacza budowanie?

W konfiguracji webpacka podajemy miejsce docelowe i......


michal@cośtam:~/fakePath$ ls  -lh dist/
-rw-rw-r-- 1 michal michal 1,1M lis 12 10:08 build.js
-rw-rw-r-- 1 michal michal 1,5M lis 12 10:08 build.js.map
-rw-rw-r-- 1 michal michal     460 lis 12 10:08 index.html

Tak może wyglądać przykładowy wynik działania webpacka. Wszystkie zależności znalazły się w pliku build.js.

(idąc za podanymi przykładami znalazłaby się tu biblioteka angular, nasz plik appModule.js, oraz to, co w index.js)

Dodatkowo w plik index.html wstrzyknięto tag src z naszym "buildem".

Ot takie proste! Wszystko czego potrzebujemy jest zawarte w jednym pliku!

Ładowanie obrazków , SASS-ów, Fontów itd

Oprócz ładownia plików JS możliwe jest także ładowanie innych typów plików. Obrazów, fontów, arkuszy Sass itd. Mechanizm jest ten sam.


var url = require("file!./file.png");
require("./style.scss");
// zmienną  url możemy wykorzystać później

Obrazki załadowane bezpośrednio w kodzie HTML także zostaną dołączone


<img class="media-object" src="./cat.jpg" alt="..." height="100">

To nam daje naprawdę szereg nowych możliwości. Na czele z największą zaletą:

W podejściu komponentowym, jesteśmy w stanie w jednym folderze źródłowym zamknąć wszystkie pliki potrzebne dla danego komponentu. Kod, style, szablon html, obrazki .... Słowem wszystko w jednym miejscu . Wystarczy tylko dodać "require" do naszego kodu i gotowe!

Transpilacja

Możemy także skonfigurować nasz system w ten sposób, żeby dokonywał transpilacji naszych plików przed dołożeniem ich do pliku wyjściowego. W tym celu moglibyśmy skorzystać wspomnianego w poprzednim wpisie babel js, lub wykorzystać język Typescript.

Odpowiednie ustawienie loaderów ( o tym mowa za chwilę) pozwoli nam w 100% pracować w TS, oraz wykorzystać znane z TS odpowiedniki "require" w postaci "import"

oto przykład pliku index.ts (TS !!!!)


import "angular";
const externalModulesNames:Array<any> = [
  'ngAnimate',
  'ngSanitize',  
  ];

var baseModule  = angular.module("App" , externalModulesNames);

Serwer i integracja z przeglądarkami

Jeśli jeszcze nie jesteś przekonany, to teraz pewnie już będziesz :) Webpack oferuje zintegrowany serwer WWW, dzięki czemu twoja aplikacja uruchomi się automatycznie. Co więcej - jeśli otworzysz 5 przeglądarek z adresem uruchomionego serwera, i będziesz sterował aplikacją na jednej, wszystkie 5 będzie się synchronizować. I tak. Mowa tu także o urządzeniach mobilnych, czyli możesz w jednym czasie testować WSZYSTKO!

Opowiadać można by długo. Najlepiej zobaczyć to wszystko w "w akcji".

Zapraszam do pobrania projektu testowego i uruchomienia go poleceniami:


npm intstall
npm start 

( uwaga - może wystąpić problem z instalacją sass-a. Użytkownicy linuxa powinni mieć zainstalowane w systemie gcc, U żytkownicy windowsa narzędzia do budowania c++ )

Nie wspomniałem o konfiguracji, sposobie działania, loaderach itd. To dlatego że pełno jest na ten temat materiałów. Zanim zaczniesz się tego wszystkiego uczyć warto jest zobaczyć korzyści na własnej skórze.

Do następnego!

PS. jest to druga część. część pierwsza tu: KLIK Projekt na githubie KLIK I jakby kogoś interesowała konfiguuracja webpacka w nim to polecam przeczytanie plików w folderku webpack( lub zaczekanie do następnego wpisu :) )

Szanowna Użytkowniczko! Szanowny Użytkowniku!
×
Aby dalej móc dostarczać coraz lepsze materiały redakcyjne i udostępniać coraz lepsze usługi, potrzebujemy zgody na dopasowanie treści marketingowych do Twojego zachowania. Twoje dane są u nas bezpieczne, a zgodę możesz wycofać w każdej chwili na podstronie polityka prywatności.

Kliknij "PRZECHODZĘ DO SERWISU" lub na symbol "X" w górnym rogu tej planszy, jeżeli zgadzasz się na przetwarzanie przez Wirtualną Polskę i naszych Zaufanych Partnerów Twoich danych osobowych, zbieranych w ramach korzystania przez Ciebie z usług, portali i serwisów internetowych Wirtualnej Polski (w tym danych zapisywanych w plikach cookies) w celach marketingowych realizowanych na zlecenie naszych Zaufanych Partnerów. Jeśli nie zgadzasz się na przetwarzanie Twoich danych osobowych skorzystaj z ustawień w polityce prywatności. Zgoda jest dobrowolna i możesz ją w dowolnym momencie wycofać zmieniając ustawienia w polityce prywatności (w której znajdziesz odpowiedzi na wszystkie pytania związane z przetwarzaniem Twoich danych osobowych).

Od 25 maja 2018 roku obowiązuje Rozporządzenie Parlamentu Europejskiego i Rady (UE) 2016/679 (określane jako "RODO"). W związku z tym chcielibyśmy poinformować o przetwarzaniu Twoich danych oraz zasadach, na jakich odbywa się to po dniu 25 maja 2018 roku.

Kto będzie administratorem Twoich danych?

Administratorami Twoich danych będzie Wirtualna Polska Media Spółka Akcyjna z siedzibą w Warszawie, oraz pozostałe spółki z grupy Wirtualna Polska, jak również nasi Zaufani Partnerzy, z którymi stale współpracujemy. Szczegółowe informacje dotyczące administratorów znajdują się w polityce prywatności.

O jakich danych mówimy?

Chodzi o dane osobowe, które są zbierane w ramach korzystania przez Ciebie z naszych usług, portali i serwisów internetowych udostępnianych przez Wirtualną Polskę, w tym zapisywanych w plikach cookies, które są instalowane na naszych stronach przez Wirtualną Polskę oraz naszych Zaufanych Partnerów.

Dlaczego chcemy przetwarzać Twoje dane?

Przetwarzamy je dostarczać coraz lepsze materiały redakcyjne, dopasować ich tematykę do Twoich zainteresowań, tworzyć portale i serwisy internetowe, z których będziesz korzystać z przyjemnością, zapewniać większe bezpieczeństwo usług, udoskonalać nasze usługi i maksymalnie dopasować je do Twoich zainteresowań, pokazywać reklamy dopasowane do Twoich potrzeb. Szczegółowe informacje dotyczące celów przetwarzania Twoich danych znajdują się w polityce prywatności.

Komu możemy przekazać dane?

Twoje dane możemy przekazywać podmiotom przetwarzającym je na nasze zlecenie oraz podmiotom uprawnionym do uzyskania danych na podstawie obowiązującego prawa – oczywiście tylko, gdy wystąpią z żądaniem w oparciu o stosowną podstawę prawną.

Jakie masz prawa w stosunku do Twoich danych?

Masz prawo żądania dostępu, sprostowania, usunięcia lub ograniczenia przetwarzania danych. Możesz wycofać zgodę na przetwarzanie, zgłosić sprzeciw oraz skorzystać z innych praw wymienionych szczegółowo w polityce prywatności.

Jakie są podstawy prawne przetwarzania Twoich danych?

Podstawą prawną przetwarzania Twoich danych w celu świadczenia usług jest niezbędność do wykonania umów o ich świadczenie (tymi umowami są zazwyczaj regulaminy). Podstawą prawną przetwarzania danych w celu pomiarów statystycznych i marketingu własnego administratorów jest tzw. uzasadniony interes administratora. Przetwarzanie Twoich danych w celach marketingowych realizowanych przez Wirtualną Polskę na zlecenie Zaufanych Partnerów i bezpośrednio przez Zaufanych Partnerów będzie odbywać się na podstawie Twojej dobrowolnej zgody.