SlideShare a Scribd company logo
1 of 41
Front-end tooling: package managers
bower, npm i nowy dzieciak w sąsiedztwie czyli yarn
Michał Michalczuk
Full-Stack Developer
1.Idea package managerów
2.Historia w JavaScript
3.Bower
4.Npm
5.Yarn
2
Punkt wyjścia
3
Jose Aguinaga na medium.com
https://goo.gl/kDVkbY
Package manager - co toto?
4
Oprogramowanie które:
• zarządzania programami/bibliotekami
• zmniejsza manualne operacje dla ww.
• śledzi wersje oprogramowania
Package manager - co toto?
5
Wikipedia: https://upload.wikimedia.org/wikipedia/commons/2/22/Pms.svg
A przynajmniej nie zawsze
package manager
rejestr / repo pakietów
task runner / bundle maker
6
Package managers
7
Idea nie jest nowa
Systemowe
• dpkg
• apt
• pacman
• yum
• homebrew
• chocolate
Package managers
8
Idea nie jest nowa
Dla IDE
• SublimeText Package Control
• Visual Studio Code Extensions Manager
• R# Extensions Manager
• Intellij/Webstorm itd Plugin Manager
• ...
Package managers
9
Problem jest jak widać powszechny
Aplikacje/Dev
pip & pypi
NuGet
anaconda
maven
gradle
gem
ivy
composer itd.
Web Development 1.0
10
// biblioteka w źródłach
<script src="vendors/js/jquery-1.11.0.min.js"></script>
// cdn
<script src="https://code.jquery.com/jquery-3.1.1.min.js"
integrity="sha256-hVVnYaiADRTO2PzUGmuLJr8BLUSjGIZsDYGmIJLv2b8="
crossorigin="anonymous"></script>
Managery pakietów
w światku JavaScript
11
Package managery dedykowane/używane do front-endu
12
https://github.com/duojs/duo
https://github.com/componentjs/component
https://github.com/caolan/jam
https://github.com/volojs/volo
https://github.com/ender-js/Ender
https://github.com/jspm/jspm-cli
https://github.com/bower/bower
https://github.com/npm
https://github.com/yarnpkg/yarn
Jak to aktualnie wygląda?
13
https://github.com/duojs/duo
https://github.com/componentjs/component
https://github.com/caolan/jam
https://github.com/volojs/volo
https://github.com/ender-js/Ender
https://github.com/jspm/jspm-cli
https://github.com/bower/bower
https://github.com/npm
https://github.com/yarnpkg/yarn
Bower
14
• Dedykowany dla front-end-u
• Płaskie zależności (od zawsze)
• bower.json
• zarządzanie zależnościami
• publikowanie pakietów
• wersja stabilna: 1.8
Bower - płaskie zależności
16
Bower - warto wiedzieć
17
• hostowany na Heroku ($170/month)
• 2points of failure: Heroku & GitHub
• brak wersjonowania rejestru
• migracja rejestru na GitHub - w trakcie
(MVP już dostępne)
• Moving Bower Registry to GitHub
• GitHub.com : bower/components
npm
18
• node package manager
• package.json
• pierwotnie tylko pakiety node.js
• do wersji 2 tylko zagnieżdżone zależności
• wersja stabilna: 3.x
• pre-releasae: 4.0.x
npm
20
• npm scripts
• ogromne repozytorium
• podział na zależności prod i dev
• npm shrinkwrap
• engines
npm - package.json angular-cli
21
{
"scripts": {
"build": "node ./scripts/publish/build.js",
"test:packages": "node scripts/run-packages-spec.js",
"eslint": "eslint ."
...
},
"engines": {
"node": ">= 4.1.0",
"npm": ">= 3.0.0"
},
...
"dependencies": {
"@angular-cli/ast-tools": "^1.0.0",
"@angular/common": "~2.1.0",
...
},
"devDependencies": {
"@types/chai": "^3.4.32",
"@types/chalk": "^0.4.28",
...
"sinon": "^1.17.3",
"walk-sync": "^0.2.6"
}
}
npm - package.json angular-cli jako start
22
{
...
"scripts": {
"start": "ng build -w *.*"
},
...
}
npm
23
• czas czas czas
• długie ścieżki (not-windows friendly)
• nie deterministyczne instalowanie pakietów
npm - do niedawna tylko zagnieżdżone zależności
24
25
Niespodziewane zmiany zależności - choroba npm & bower
Bower
{
"name": "3camp-bower",
...
"dependencies": {
"moment": "momentjs#^2.16.0"
}
}
npm
{
"name": "3camp-npm",
...
"dependencies": {
"moment": "^2.16.0"
}
}
26
pułapka semver
Niespodziewane zmiany zależności - rozwiązania
Bower
natywnie:
zewnętrzne biblioteki:
https://github.com/shyiko/bower-shrinkwrap-
resolver
npm
natywnie: npm shrinkwrap
27
npm - shrinkwrap
28
{
"name": "3camp-npm",
"version": "1.0.0",
"dependencies": {
"moment": {
"version": "2.16.0",
"from": "moment@*",
"resolved":"http://registry.npmjs.org/moment/-/moment-2.16.0.tgz"
}
}
}
npm-shrinkwrap.json
npm - shrinkwrap
29
$ npm shrinkwrap
$ # commit npm-shrinkwrap.json
$ npm install jquery --save
$ # npm-shrinkwrap.json updated
npm-shrinkwrap.json
$ npm shrinkwrap -dev
$ # npm-shrinkwrap.json updated
$ npm install tslint --save-dev
$ npm shrinkwrap -dev
$ # run manually :(
npm - shrinkwrap. Zależności dev
30
npm-shrinkwrap.json
11.10.2016 - Facebook wypuszcza yarn-a
31
Moja pierwsza reakcja
32
xkcd: https://xkcd.com/927/
yarn / yarnpkg - nowy dzieciak w sąsiedztwie
33
• korzysta z repozytoriów npm i bower
• zgodny z package.json
• node_modules
• deterministyczny
• szybki
• automatyczny lock (odpowiednik
shrinkwrap)
• generowanie listy licencji wszystkich
pakietów
yarn / yarnpkg - nowy dzieciak w sąsiedztwie
34
• opcja pracy offline
• globalny cache (tak, działa lepiej niż w npm)
• kolejnowanie requestów http
yarn / yarnpkg - jak szybki jest?
36
https://medium.freecodecamp.com/npm-vs-yarn-benchmark-9b456de4aa96#.84t483iqv
Czas w [s]
angular2 | ember | react
| npm_with_empty_cache | 15.687 | 56.993 | 93.650
| npm_with_all_cached | 9.380 | 52.380 | 81.213
|yarn_with_empty_cache | 9.477 | 30.757 | 37.497
| yarn_with_all_cached | 4.650 | 15.090 | 17.730
yarn / yarnpkg - jak szybki jest na CI?
37
Czas w [s]
angular2 | ember | react
| npm_with_empty_cache | 19.720 | 55.090 | 76.233
| npm_with_all_cached | 14.640 | 40.203 | 56.467
|yarn_with_empty_cache | 13.193 | 34.037 | 43.663
| yarn_with_all_cached | 5.830 | 15.923 | 40.420
yarn / yarnpkg - nowy dzieciak w sąsiedztwie
38
• jeszcze nie do końca kompatybilny z npm
(zależności do plików)
dependencies: {
"my-package": "../my-package",
}
dependencies: {
"my-package": "file:../my-package",
}
• jeszcze nie do końca multiplatformowy
Windows 10: error An unexpected error occurred:
"ENOENT: no such file or directory, open ‘{file-path}’
yarn benchmark: https://medium.freecodecamp.com/npm-vs-yarn-benchmark-
9b456de4aa96#.3r20pxkz1
NPM vs Yarn Cheat Sheet: https://shift.infinite.red/npm-vs-yarn-cheat-sheet-
8755b092e5cc#.rq6q2e5at
Package managers 101: https://medium.freecodecamp.com/javascript-package-
managers-101-9afd926add0a#.oqbv7v8g9
bower packages repo goes to GitHub:
https://twitter.com/sheerun/status/796046017133211648
Migrate from npm to yarn:
https://yarnpkg.com/en/docs/migrating-from-npm
yarn, facebook blog: https://code.facebook.com/posts/1840075619545360/yarn-a-new-
package-manager-for-javascript/
file issue, yarn:
yarnpkg/yarn: Issue #605
front-end packages (old):
https://github.com/wilmoore/frontend-packagers
npm shrinkwrap:
https://docs.npmjs.com/cli/shrinkwrap
39
Dziękuję za uwagę
michalczukm michalczukm@gmail.com
prezentacja:
goo.gl/foo
Pytania?
michalczukm michalczukm@gmail.com
prezentacja:
goo.gl/foo

More Related Content

What's hot

Jak poprawić Core Web Vitals w aplikacji Next.js
Jak poprawić Core Web Vitals w aplikacji Next.jsJak poprawić Core Web Vitals w aplikacji Next.js
Jak poprawić Core Web Vitals w aplikacji Next.jsThe Software House
 
Wtyczkowe Kompendium - WordUp Łódź #12
Wtyczkowe Kompendium - WordUp Łódź #12Wtyczkowe Kompendium - WordUp Łódź #12
Wtyczkowe Kompendium - WordUp Łódź #12Tomasz Dziuda
 
Wtyczkowe kompendium - WordUp Warszawa
Wtyczkowe kompendium - WordUp WarszawaWtyczkowe kompendium - WordUp Warszawa
Wtyczkowe kompendium - WordUp WarszawaTomasz Dziuda
 
Jak zostać mobile deweloperem w 1 dzień
Jak zostać mobile deweloperem w 1 dzieńJak zostać mobile deweloperem w 1 dzień
Jak zostać mobile deweloperem w 1 dzieńPaweł Kondraciuk
 
Migrate API w Drupalu [PL]
Migrate API w Drupalu [PL]Migrate API w Drupalu [PL]
Migrate API w Drupalu [PL]Droptica
 
Ansible - Automatyzacja zadań IT
Ansible - Automatyzacja zadań ITAnsible - Automatyzacja zadań IT
Ansible - Automatyzacja zadań ITKamil Grabowski
 
Debugowanie skryptow php za pomoca xdebug
Debugowanie skryptow php za pomoca xdebugDebugowanie skryptow php za pomoca xdebug
Debugowanie skryptow php za pomoca xdebugXSolve
 
Kainos Tech Space #1 : DevOps : Artur Senk - Jenkins, najważniejsze narzędzie...
Kainos Tech Space #1 : DevOps : Artur Senk - Jenkins, najważniejsze narzędzie...Kainos Tech Space #1 : DevOps : Artur Senk - Jenkins, najważniejsze narzędzie...
Kainos Tech Space #1 : DevOps : Artur Senk - Jenkins, najważniejsze narzędzie...Kainos Polska
 
Xdebug – debugowanie i profilowanie aplikacji PHP
Xdebug – debugowanie i profilowanie aplikacji PHPXdebug – debugowanie i profilowanie aplikacji PHP
Xdebug – debugowanie i profilowanie aplikacji PHP3camp
 
Hugo - make webdev fun again
Hugo - make webdev fun againHugo - make webdev fun again
Hugo - make webdev fun againMarcin Gajda
 
Vagrant - RuPy Tuesday
Vagrant - RuPy TuesdayVagrant - RuPy Tuesday
Vagrant - RuPy TuesdayGaldoMedia
 
“Dziesięć serwerów poproszę!“, czyli co może Ci zaoferować definiowanie infra...
“Dziesięć serwerów poproszę!“, czyli co może Ci zaoferować definiowanie infra...“Dziesięć serwerów poproszę!“, czyli co może Ci zaoferować definiowanie infra...
“Dziesięć serwerów poproszę!“, czyli co może Ci zaoferować definiowanie infra...The Software House
 
LXC - kontener pingwinów
LXC - kontener pingwinówLXC - kontener pingwinów
LXC - kontener pingwinówgnosek
 
Uwierzytelnianie dwuetapowe (2FA) w Drupalu [PL]
Uwierzytelnianie dwuetapowe (2FA) w Drupalu [PL]Uwierzytelnianie dwuetapowe (2FA) w Drupalu [PL]
Uwierzytelnianie dwuetapowe (2FA) w Drupalu [PL]Droptica
 
[Quality Meetup #9] TestOps, QAOps - czy ktoś taki istnieje? - Aleksandra Kor...
[Quality Meetup #9] TestOps, QAOps - czy ktoś taki istnieje? - Aleksandra Kor...[Quality Meetup #9] TestOps, QAOps - czy ktoś taki istnieje? - Aleksandra Kor...
[Quality Meetup #9] TestOps, QAOps - czy ktoś taki istnieje? - Aleksandra Kor...Future Processing
 

What's hot (20)

JavaScript. Biblia
JavaScript. BibliaJavaScript. Biblia
JavaScript. Biblia
 
Infrastructure As Code
Infrastructure As CodeInfrastructure As Code
Infrastructure As Code
 
Jak poprawić Core Web Vitals w aplikacji Next.js
Jak poprawić Core Web Vitals w aplikacji Next.jsJak poprawić Core Web Vitals w aplikacji Next.js
Jak poprawić Core Web Vitals w aplikacji Next.js
 
Wtyczkowe Kompendium - WordUp Łódź #12
Wtyczkowe Kompendium - WordUp Łódź #12Wtyczkowe Kompendium - WordUp Łódź #12
Wtyczkowe Kompendium - WordUp Łódź #12
 
Wtyczkowe kompendium - WordUp Warszawa
Wtyczkowe kompendium - WordUp WarszawaWtyczkowe kompendium - WordUp Warszawa
Wtyczkowe kompendium - WordUp Warszawa
 
Jak zostać mobile deweloperem w 1 dzień
Jak zostać mobile deweloperem w 1 dzieńJak zostać mobile deweloperem w 1 dzień
Jak zostać mobile deweloperem w 1 dzień
 
Ansible w praktyce
Ansible w praktyceAnsible w praktyce
Ansible w praktyce
 
Iron Python I Dlr
Iron Python I DlrIron Python I Dlr
Iron Python I Dlr
 
Migrate API w Drupalu [PL]
Migrate API w Drupalu [PL]Migrate API w Drupalu [PL]
Migrate API w Drupalu [PL]
 
Ansible - Automatyzacja zadań IT
Ansible - Automatyzacja zadań ITAnsible - Automatyzacja zadań IT
Ansible - Automatyzacja zadań IT
 
Debugowanie skryptow php za pomoca xdebug
Debugowanie skryptow php za pomoca xdebugDebugowanie skryptow php za pomoca xdebug
Debugowanie skryptow php za pomoca xdebug
 
Kainos Tech Space #1 : DevOps : Artur Senk - Jenkins, najważniejsze narzędzie...
Kainos Tech Space #1 : DevOps : Artur Senk - Jenkins, najważniejsze narzędzie...Kainos Tech Space #1 : DevOps : Artur Senk - Jenkins, najważniejsze narzędzie...
Kainos Tech Space #1 : DevOps : Artur Senk - Jenkins, najważniejsze narzędzie...
 
Xdebug – debugowanie i profilowanie aplikacji PHP
Xdebug – debugowanie i profilowanie aplikacji PHPXdebug – debugowanie i profilowanie aplikacji PHP
Xdebug – debugowanie i profilowanie aplikacji PHP
 
Hugo - make webdev fun again
Hugo - make webdev fun againHugo - make webdev fun again
Hugo - make webdev fun again
 
Vagrant - RuPy Tuesday
Vagrant - RuPy TuesdayVagrant - RuPy Tuesday
Vagrant - RuPy Tuesday
 
“Dziesięć serwerów poproszę!“, czyli co może Ci zaoferować definiowanie infra...
“Dziesięć serwerów poproszę!“, czyli co może Ci zaoferować definiowanie infra...“Dziesięć serwerów poproszę!“, czyli co może Ci zaoferować definiowanie infra...
“Dziesięć serwerów poproszę!“, czyli co może Ci zaoferować definiowanie infra...
 
WordCamp Gdynia 2016
WordCamp Gdynia 2016WordCamp Gdynia 2016
WordCamp Gdynia 2016
 
LXC - kontener pingwinów
LXC - kontener pingwinówLXC - kontener pingwinów
LXC - kontener pingwinów
 
Uwierzytelnianie dwuetapowe (2FA) w Drupalu [PL]
Uwierzytelnianie dwuetapowe (2FA) w Drupalu [PL]Uwierzytelnianie dwuetapowe (2FA) w Drupalu [PL]
Uwierzytelnianie dwuetapowe (2FA) w Drupalu [PL]
 
[Quality Meetup #9] TestOps, QAOps - czy ktoś taki istnieje? - Aleksandra Kor...
[Quality Meetup #9] TestOps, QAOps - czy ktoś taki istnieje? - Aleksandra Kor...[Quality Meetup #9] TestOps, QAOps - czy ktoś taki istnieje? - Aleksandra Kor...
[Quality Meetup #9] TestOps, QAOps - czy ktoś taki istnieje? - Aleksandra Kor...
 

Viewers also liked

Yarn resource-manager
Yarn resource-managerYarn resource-manager
Yarn resource-managerSeiya Mizuno
 
Introduction to node js
Introduction to node jsIntroduction to node js
Introduction to node jsAmit Thakkar
 
Yarn package management
Yarn package managementYarn package management
Yarn package managementrudiyardley
 
SenchaCon 2016: The Modern Toolchain - Ross Gerbasi
SenchaCon 2016: The Modern Toolchain - Ross Gerbasi   SenchaCon 2016: The Modern Toolchain - Ross Gerbasi
SenchaCon 2016: The Modern Toolchain - Ross Gerbasi Sencha
 

Viewers also liked (8)

Liberar espacio en disco duro
Liberar espacio en disco duroLiberar espacio en disco duro
Liberar espacio en disco duro
 
Yarn resource-manager
Yarn resource-managerYarn resource-manager
Yarn resource-manager
 
Introduction to node js
Introduction to node jsIntroduction to node js
Introduction to node js
 
Yarn package management
Yarn package managementYarn package management
Yarn package management
 
NPM THE GUIDE
NPM THE GUIDENPM THE GUIDE
NPM THE GUIDE
 
Yarn
YarnYarn
Yarn
 
Angular 2 - An Introduction
Angular 2 - An IntroductionAngular 2 - An Introduction
Angular 2 - An Introduction
 
SenchaCon 2016: The Modern Toolchain - Ross Gerbasi
SenchaCon 2016: The Modern Toolchain - Ross Gerbasi   SenchaCon 2016: The Modern Toolchain - Ross Gerbasi
SenchaCon 2016: The Modern Toolchain - Ross Gerbasi
 

Similar to 3Camp Tech 2016/11/15 - Front-end tooling: package managers

Jak przyspieszyłem aplikację produkcyjną o ponad 40%
Jak przyspieszyłem aplikację produkcyjną o ponad 40%Jak przyspieszyłem aplikację produkcyjną o ponad 40%
Jak przyspieszyłem aplikację produkcyjną o ponad 40%Laravel Poland MeetUp
 
Praktyczne code reviews - PHPConPl
Praktyczne code reviews - PHPConPlPraktyczne code reviews - PHPConPl
Praktyczne code reviews - PHPConPlSebastian Marek
 
Laravel Poznań Meetup #4 - EloquentSequence - Historia pewnej biblioteki Open...
Laravel Poznań Meetup #4 - EloquentSequence - Historia pewnej biblioteki Open...Laravel Poznań Meetup #4 - EloquentSequence - Historia pewnej biblioteki Open...
Laravel Poznań Meetup #4 - EloquentSequence - Historia pewnej biblioteki Open...HighSolutions Sp. z o.o.
 
EloquentSequence - historia pewnej biblioteki Open Source
EloquentSequence - historia pewnej biblioteki Open SourceEloquentSequence - historia pewnej biblioteki Open Source
EloquentSequence - historia pewnej biblioteki Open SourceLaravel Poland MeetUp
 
Zastosowanie buildout przy wdrażaniu projektów opartych o framework Django
Zastosowanie buildout przy wdrażaniu projektów opartych o framework DjangoZastosowanie buildout przy wdrażaniu projektów opartych o framework Django
Zastosowanie buildout przy wdrażaniu projektów opartych o framework DjangoDominik Szopa
 
Daj się wyręczyć - Joomla Day Polska 2014
Daj się wyręczyć - Joomla Day Polska 2014Daj się wyręczyć - Joomla Day Polska 2014
Daj się wyręczyć - Joomla Day Polska 2014Tomasz Dziuda
 
Shall we play a game? PL version
Shall we play a game? PL versionShall we play a game? PL version
Shall we play a game? PL versionMaciej Lasyk
 
Kubernetes (Canary) Deployments
Kubernetes (Canary) DeploymentsKubernetes (Canary) Deployments
Kubernetes (Canary) DeploymentsThe Software House
 
Word up łódź kwiecień 2015
Word up łódź   kwiecień 2015Word up łódź   kwiecień 2015
Word up łódź kwiecień 2015Tomasz Dziuda
 
Jak zacząć, aby nie żałować - czyli 50 twarzy PHP
Jak zacząć, aby nie żałować - czyli 50 twarzy PHPJak zacząć, aby nie żałować - czyli 50 twarzy PHP
Jak zacząć, aby nie żałować - czyli 50 twarzy PHPPiotr Horzycki
 
Jak nie zwariować z tymi pakietami
Jak nie  zwariować z tymi pakietamiJak nie  zwariować z tymi pakietami
Jak nie zwariować z tymi pakietamiArek Bee.
 
WordUp Kraków - maj 2015
WordUp Kraków - maj 2015WordUp Kraków - maj 2015
WordUp Kraków - maj 2015Tomasz Dziuda
 
Automatyzacja tworzenia maszyn wirtualnych Magdalena Wojnarowska
Automatyzacja tworzenia maszyn wirtualnych Magdalena WojnarowskaAutomatyzacja tworzenia maszyn wirtualnych Magdalena Wojnarowska
Automatyzacja tworzenia maszyn wirtualnych Magdalena WojnarowskaWomen in Technology Poland
 
PLNOG 22 - Krzysztof Załęski - Praktyczne zastosowanie narzędzi NetDevOps
PLNOG 22 - Krzysztof Załęski - Praktyczne zastosowanie narzędzi NetDevOpsPLNOG 22 - Krzysztof Załęski - Praktyczne zastosowanie narzędzi NetDevOps
PLNOG 22 - Krzysztof Załęski - Praktyczne zastosowanie narzędzi NetDevOpsPROIDEA
 
PHP@Docker - w produkcji
PHP@Docker - w produkcjiPHP@Docker - w produkcji
PHP@Docker - w produkcjiMarcin Kurzyna
 
Docker na MacOS przy wsparciu maszyny wirtualnej z Linuksem [PL]
Docker na MacOS przy wsparciu maszyny wirtualnej z Linuksem [PL]Docker na MacOS przy wsparciu maszyny wirtualnej z Linuksem [PL]
Docker na MacOS przy wsparciu maszyny wirtualnej z Linuksem [PL]Droptica
 

Similar to 3Camp Tech 2016/11/15 - Front-end tooling: package managers (20)

Jak przyspieszyłem aplikację produkcyjną o ponad 40%
Jak przyspieszyłem aplikację produkcyjną o ponad 40%Jak przyspieszyłem aplikację produkcyjną o ponad 40%
Jak przyspieszyłem aplikację produkcyjną o ponad 40%
 
OpenEmbedded
OpenEmbeddedOpenEmbedded
OpenEmbedded
 
Praktyczne code reviews - PHPConPl
Praktyczne code reviews - PHPConPlPraktyczne code reviews - PHPConPl
Praktyczne code reviews - PHPConPl
 
Laravel Poznań Meetup #4 - EloquentSequence - Historia pewnej biblioteki Open...
Laravel Poznań Meetup #4 - EloquentSequence - Historia pewnej biblioteki Open...Laravel Poznań Meetup #4 - EloquentSequence - Historia pewnej biblioteki Open...
Laravel Poznań Meetup #4 - EloquentSequence - Historia pewnej biblioteki Open...
 
EloquentSequence - historia pewnej biblioteki Open Source
EloquentSequence - historia pewnej biblioteki Open SourceEloquentSequence - historia pewnej biblioteki Open Source
EloquentSequence - historia pewnej biblioteki Open Source
 
Zastosowanie buildout przy wdrażaniu projektów opartych o framework Django
Zastosowanie buildout przy wdrażaniu projektów opartych o framework DjangoZastosowanie buildout przy wdrażaniu projektów opartych o framework Django
Zastosowanie buildout przy wdrażaniu projektów opartych o framework Django
 
Daj się wyręczyć - Joomla Day Polska 2014
Daj się wyręczyć - Joomla Day Polska 2014Daj się wyręczyć - Joomla Day Polska 2014
Daj się wyręczyć - Joomla Day Polska 2014
 
Od zera do Automattica
Od zera do AutomatticaOd zera do Automattica
Od zera do Automattica
 
Shall we play a game? PL version
Shall we play a game? PL versionShall we play a game? PL version
Shall we play a game? PL version
 
Kubernetes (Canary) Deployments
Kubernetes (Canary) DeploymentsKubernetes (Canary) Deployments
Kubernetes (Canary) Deployments
 
Webinar symfony
Webinar symfonyWebinar symfony
Webinar symfony
 
Word up łódź kwiecień 2015
Word up łódź   kwiecień 2015Word up łódź   kwiecień 2015
Word up łódź kwiecień 2015
 
Jak zacząć, aby nie żałować - czyli 50 twarzy PHP
Jak zacząć, aby nie żałować - czyli 50 twarzy PHPJak zacząć, aby nie żałować - czyli 50 twarzy PHP
Jak zacząć, aby nie żałować - czyli 50 twarzy PHP
 
Jak nie zwariować z tymi pakietami
Jak nie  zwariować z tymi pakietamiJak nie  zwariować z tymi pakietami
Jak nie zwariować z tymi pakietami
 
WordUp Kraków - maj 2015
WordUp Kraków - maj 2015WordUp Kraków - maj 2015
WordUp Kraków - maj 2015
 
Automatyzacja tworzenia maszyn wirtualnych Magdalena Wojnarowska
Automatyzacja tworzenia maszyn wirtualnych Magdalena WojnarowskaAutomatyzacja tworzenia maszyn wirtualnych Magdalena Wojnarowska
Automatyzacja tworzenia maszyn wirtualnych Magdalena Wojnarowska
 
Platforma Kontentowa
Platforma KontentowaPlatforma Kontentowa
Platforma Kontentowa
 
PLNOG 22 - Krzysztof Załęski - Praktyczne zastosowanie narzędzi NetDevOps
PLNOG 22 - Krzysztof Załęski - Praktyczne zastosowanie narzędzi NetDevOpsPLNOG 22 - Krzysztof Załęski - Praktyczne zastosowanie narzędzi NetDevOps
PLNOG 22 - Krzysztof Załęski - Praktyczne zastosowanie narzędzi NetDevOps
 
PHP@Docker - w produkcji
PHP@Docker - w produkcjiPHP@Docker - w produkcji
PHP@Docker - w produkcji
 
Docker na MacOS przy wsparciu maszyny wirtualnej z Linuksem [PL]
Docker na MacOS przy wsparciu maszyny wirtualnej z Linuksem [PL]Docker na MacOS przy wsparciu maszyny wirtualnej z Linuksem [PL]
Docker na MacOS przy wsparciu maszyny wirtualnej z Linuksem [PL]
 

3Camp Tech 2016/11/15 - Front-end tooling: package managers

  • 1. Front-end tooling: package managers bower, npm i nowy dzieciak w sąsiedztwie czyli yarn Michał Michalczuk Full-Stack Developer
  • 2. 1.Idea package managerów 2.Historia w JavaScript 3.Bower 4.Npm 5.Yarn 2
  • 3. Punkt wyjścia 3 Jose Aguinaga na medium.com https://goo.gl/kDVkbY
  • 4. Package manager - co toto? 4 Oprogramowanie które: • zarządzania programami/bibliotekami • zmniejsza manualne operacje dla ww. • śledzi wersje oprogramowania
  • 5. Package manager - co toto? 5 Wikipedia: https://upload.wikimedia.org/wikipedia/commons/2/22/Pms.svg
  • 6. A przynajmniej nie zawsze package manager rejestr / repo pakietów task runner / bundle maker 6
  • 7. Package managers 7 Idea nie jest nowa Systemowe • dpkg • apt • pacman • yum • homebrew • chocolate
  • 8. Package managers 8 Idea nie jest nowa Dla IDE • SublimeText Package Control • Visual Studio Code Extensions Manager • R# Extensions Manager • Intellij/Webstorm itd Plugin Manager • ...
  • 9. Package managers 9 Problem jest jak widać powszechny Aplikacje/Dev pip & pypi NuGet anaconda maven gradle gem ivy composer itd.
  • 10. Web Development 1.0 10 // biblioteka w źródłach <script src="vendors/js/jquery-1.11.0.min.js"></script> // cdn <script src="https://code.jquery.com/jquery-3.1.1.min.js" integrity="sha256-hVVnYaiADRTO2PzUGmuLJr8BLUSjGIZsDYGmIJLv2b8=" crossorigin="anonymous"></script>
  • 12. Package managery dedykowane/używane do front-endu 12 https://github.com/duojs/duo https://github.com/componentjs/component https://github.com/caolan/jam https://github.com/volojs/volo https://github.com/ender-js/Ender https://github.com/jspm/jspm-cli https://github.com/bower/bower https://github.com/npm https://github.com/yarnpkg/yarn
  • 13. Jak to aktualnie wygląda? 13 https://github.com/duojs/duo https://github.com/componentjs/component https://github.com/caolan/jam https://github.com/volojs/volo https://github.com/ender-js/Ender https://github.com/jspm/jspm-cli https://github.com/bower/bower https://github.com/npm https://github.com/yarnpkg/yarn
  • 14. Bower 14 • Dedykowany dla front-end-u • Płaskie zależności (od zawsze) • bower.json • zarządzanie zależnościami • publikowanie pakietów • wersja stabilna: 1.8
  • 15.
  • 16. Bower - płaskie zależności 16
  • 17. Bower - warto wiedzieć 17 • hostowany na Heroku ($170/month) • 2points of failure: Heroku & GitHub • brak wersjonowania rejestru • migracja rejestru na GitHub - w trakcie (MVP już dostępne) • Moving Bower Registry to GitHub • GitHub.com : bower/components
  • 18. npm 18 • node package manager • package.json • pierwotnie tylko pakiety node.js • do wersji 2 tylko zagnieżdżone zależności • wersja stabilna: 3.x • pre-releasae: 4.0.x
  • 19.
  • 20. npm 20 • npm scripts • ogromne repozytorium • podział na zależności prod i dev • npm shrinkwrap • engines
  • 21. npm - package.json angular-cli 21 { "scripts": { "build": "node ./scripts/publish/build.js", "test:packages": "node scripts/run-packages-spec.js", "eslint": "eslint ." ... }, "engines": { "node": ">= 4.1.0", "npm": ">= 3.0.0" }, ... "dependencies": { "@angular-cli/ast-tools": "^1.0.0", "@angular/common": "~2.1.0", ... }, "devDependencies": { "@types/chai": "^3.4.32", "@types/chalk": "^0.4.28", ... "sinon": "^1.17.3", "walk-sync": "^0.2.6" } }
  • 22. npm - package.json angular-cli jako start 22 { ... "scripts": { "start": "ng build -w *.*" }, ... }
  • 23. npm 23 • czas czas czas • długie ścieżki (not-windows friendly) • nie deterministyczne instalowanie pakietów
  • 24. npm - do niedawna tylko zagnieżdżone zależności 24
  • 25. 25
  • 26. Niespodziewane zmiany zależności - choroba npm & bower Bower { "name": "3camp-bower", ... "dependencies": { "moment": "momentjs#^2.16.0" } } npm { "name": "3camp-npm", ... "dependencies": { "moment": "^2.16.0" } } 26 pułapka semver
  • 27. Niespodziewane zmiany zależności - rozwiązania Bower natywnie: zewnętrzne biblioteki: https://github.com/shyiko/bower-shrinkwrap- resolver npm natywnie: npm shrinkwrap 27
  • 28. npm - shrinkwrap 28 { "name": "3camp-npm", "version": "1.0.0", "dependencies": { "moment": { "version": "2.16.0", "from": "moment@*", "resolved":"http://registry.npmjs.org/moment/-/moment-2.16.0.tgz" } } } npm-shrinkwrap.json
  • 29. npm - shrinkwrap 29 $ npm shrinkwrap $ # commit npm-shrinkwrap.json $ npm install jquery --save $ # npm-shrinkwrap.json updated npm-shrinkwrap.json
  • 30. $ npm shrinkwrap -dev $ # npm-shrinkwrap.json updated $ npm install tslint --save-dev $ npm shrinkwrap -dev $ # run manually :( npm - shrinkwrap. Zależności dev 30 npm-shrinkwrap.json
  • 31. 11.10.2016 - Facebook wypuszcza yarn-a 31
  • 32. Moja pierwsza reakcja 32 xkcd: https://xkcd.com/927/
  • 33. yarn / yarnpkg - nowy dzieciak w sąsiedztwie 33 • korzysta z repozytoriów npm i bower • zgodny z package.json • node_modules • deterministyczny • szybki • automatyczny lock (odpowiednik shrinkwrap) • generowanie listy licencji wszystkich pakietów
  • 34. yarn / yarnpkg - nowy dzieciak w sąsiedztwie 34 • opcja pracy offline • globalny cache (tak, działa lepiej niż w npm) • kolejnowanie requestów http
  • 35.
  • 36. yarn / yarnpkg - jak szybki jest? 36 https://medium.freecodecamp.com/npm-vs-yarn-benchmark-9b456de4aa96#.84t483iqv Czas w [s] angular2 | ember | react | npm_with_empty_cache | 15.687 | 56.993 | 93.650 | npm_with_all_cached | 9.380 | 52.380 | 81.213 |yarn_with_empty_cache | 9.477 | 30.757 | 37.497 | yarn_with_all_cached | 4.650 | 15.090 | 17.730
  • 37. yarn / yarnpkg - jak szybki jest na CI? 37 Czas w [s] angular2 | ember | react | npm_with_empty_cache | 19.720 | 55.090 | 76.233 | npm_with_all_cached | 14.640 | 40.203 | 56.467 |yarn_with_empty_cache | 13.193 | 34.037 | 43.663 | yarn_with_all_cached | 5.830 | 15.923 | 40.420
  • 38. yarn / yarnpkg - nowy dzieciak w sąsiedztwie 38 • jeszcze nie do końca kompatybilny z npm (zależności do plików) dependencies: { "my-package": "../my-package", } dependencies: { "my-package": "file:../my-package", } • jeszcze nie do końca multiplatformowy Windows 10: error An unexpected error occurred: "ENOENT: no such file or directory, open ‘{file-path}’
  • 39. yarn benchmark: https://medium.freecodecamp.com/npm-vs-yarn-benchmark- 9b456de4aa96#.3r20pxkz1 NPM vs Yarn Cheat Sheet: https://shift.infinite.red/npm-vs-yarn-cheat-sheet- 8755b092e5cc#.rq6q2e5at Package managers 101: https://medium.freecodecamp.com/javascript-package- managers-101-9afd926add0a#.oqbv7v8g9 bower packages repo goes to GitHub: https://twitter.com/sheerun/status/796046017133211648 Migrate from npm to yarn: https://yarnpkg.com/en/docs/migrating-from-npm yarn, facebook blog: https://code.facebook.com/posts/1840075619545360/yarn-a-new- package-manager-for-javascript/ file issue, yarn: yarnpkg/yarn: Issue #605 front-end packages (old): https://github.com/wilmoore/frontend-packagers npm shrinkwrap: https://docs.npmjs.com/cli/shrinkwrap 39
  • 40. Dziękuję za uwagę michalczukm michalczukm@gmail.com prezentacja: goo.gl/foo