Presentation from 3Camp Tech meeting I took at 2016/11/15.
Asciinema from presentation:
* bower: https://asciinema.org/a/92748
* npm: https://asciinema.org/a/92752
* yarn: https://asciinema.org/a/92771
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>
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
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
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}’