NPM vs Bower vs Browserify vs Gulp vs Grunt vs Webpack
Próbuję podsumować moją wiedzę na temat najpopularniejszych menedżerów pakietów JavaScript, bundlerów i biegaczy zadań. Proszę popraw mnie jeśli się mylę:
-
npm
&bower
są menedżerami pakietów. Po prostu pobierają zależności i nie wiedzą, jak samodzielnie budować projekty. To co wiedzą to nazywaćwebpack
/gulp
/grunt
Po pobraniu wszystkich zależności. -
{[1] } jest podobny do
npm
, ale buduje spłaszczone drzewa zależności (w przeciwieństwie donpm
, które robią to rekurencyjnie). Znaczenienpm
pobiera zależności dla każdej zależności (może pobrać to samo kilka razy), podczas gdybower
oczekuje, że ręcznie dołączysz zależności. Czasamibower
inpm
są używane razem odpowiednio dla front-endu i back-endu (ponieważ każdy megabajt może mieć znaczenie na front-endzie). -
grunt
i {[3] } są biegaczami zadań do automatyzacji wszystkiego, co może być zautomatyzowane (tj. skompilować CSS/Sass, zoptymalizować obrazy, utworzyć pakiet i minifikować/transpile go). -
grunt
vs.gulp
(jest jakmaven
vs.gradle
lub Konfiguracja vs. kod). Grunt opiera się na konfigurowaniu oddzielnych niezależnych zadań, każde zadanie otwiera/obsługuje/zamyka plik. Gulp wymaga mniejszej ilości kodu i jest oparty na strumieniach węzłów, co pozwala mu na budowanie łańcuchów rurowych (bez ponownego otwierania tego samego pliku) i sprawia, że jest szybszy. -
webpack
(webpack-dev-server
) - dla mnie jest to biegacz zadań z gorącym przeładowaniem zmian, który pozwala zapomnieć o wszystkich obserwatorach JS/CSS. -
npm
/bower
+ wtyczki mogą zastąpić biegaczy zadań. Ich zdolności często się krzyżują, więc istnieją różne implikacje, jeśli potrzebujesz użyćgulp
/grunt
overnpm
+ plugins. "Na każdej kompilacji Utwórz pakiet, prześlij z ES6 na ES5, uruchom go we wszystkich emulatorach przeglądarek, wykonaj zrzuty ekranu i wdroż do dropbox przez ftp"). -
browserify
pozwala na konfigurację modułów węzłów dla przeglądarek.browserify
vsnode
' srequire
to faktycznie AMD vs CommonJS .
pytania:
-
Co to jest
webpack
&webpack-dev-server
? oficjalna dokumentacja mówi, że to moduł bundler, ale dla mnie to tylko zadanie runner. co za różnica? -
gdzie byś użył
browserify
? Czy nie możemy zrobić tego samego z importem node/ES6? - kiedy użyjesz
gulp
/grunt
overnpm
+ plugins? - proszę podać przykłady, gdy trzeba użyć kombinacja
9 answers
Webpack i Browserify
Webpack i Browserify wykonują prawie to samo zadanie, którym jest przetwarzanie kodu w celu użycia go w docelowym środowisku (głównie w przeglądarce, ale możesz kierować na inne środowiska, takie jak Node). Rezultatem takiego przetwarzania jest jeden lub więcej bundles - zmontowanych skryptów odpowiednich dla docelowego środowiska.
Załóżmy na przykład, że napisałeś kod ES6 podzielony na moduły i chcesz móc go uruchomić w przeglądarce. Jeśli te moduły są Moduły węzłów, przeglądarka ich nie zrozumie, ponieważ istnieją tylko w środowisku węzłów. Moduły ES6 nie działają również w starszych przeglądarkach, takich jak IE11. Co więcej, mogłeś użyć eksperymentalnych funkcji językowych (ES next proposals), których przeglądarki jeszcze nie implementują, więc uruchomienie takiego skryptu po prostu wyrzuciłoby błędy. Narzędzia takie jak Webpack i Browserify rozwiązują te problemy poprzez tłumaczenie takiego kodu do przeglądarki formularzy jest w stanie wykonać. Dodatkowo umożliwiają zastosowanie ogromnej różnorodność optymalizacji tych pakietów.
Jednak Webpack i Browserify różnią się pod wieloma względami, Webpack domyślnie oferuje wiele narzędzi( np. dzielenie kodu), podczas gdy Browserify może to zrobić tylko po pobraniu wtyczek, ale użycie obu prowadzi do bardzo podobnych wyników. Sprowadza się to do osobistych preferencji (Webpack jest bardziej trendy). Btw, Webpack nie jest runnerem zadań, to tylko procesor Twoich plików (przetwarza je przez tzw. loadery i pluginy) i można go uruchomić (między inne sposoby) przez biegacza zadania.
Webpack Dev Server
Webpack Dev Server zapewnia podobne rozwiązanie do Browsersync - serwera programistycznego, na którym można szybko wdrożyć aplikację podczas pracy nad nią i natychmiast zweryfikować postępy w rozwoju za pomocą serwera deweloperskiego automatycznie odświeżającego przeglądarkę na zmiany kodu lub nawet propagującego zmieniony kod do przeglądarki bez przeładowywania za pomocą tzw. hot module replacement.
Task runners vs NPM Skrypty
Używałem Gulp dla jego zwięzłości i łatwego pisania zadań, ale później okazało się, że nie potrzebuję ani Gulp ani Grunt w ogóle. Wszystko, czego kiedykolwiek potrzebowałem, można było zrobić za pomocą skryptów NPM, aby uruchomić narzędzia innych firm za pośrednictwem ich API. wybór pomiędzy skryptami Gulp, Grunt lub NPM zależy od gustu i doświadczenia Twojego zespołu.
Podczas gdy zadania w Gulp lub Grunt są łatwe do odczytania nawet dla osób nie tak obeznanych z JS, jest to kolejne narzędzie, które wymaga i ucz się i osobiście wolę zawęzić moje zależności i uprościć rzeczy. Z drugiej strony, zastąpienie tych zadań kombinacją skryptów NPM i (prawdopodobnie JS) skryptów, które uruchamiają te narzędzia 3rd party (np. Konfigurowanie i uruchamianie skryptu węzła rimraf do celów czyszczenia) może być trudniejsze. Ale w większości przypadków, te trzy są równe pod względem wyników.
Przykłady
Jeśli chodzi o przykłady, proponuję rzucić okiem w tym react starter project , który pokazuje miłą kombinację skryptów NPM i JS obejmujących cały proces budowania i wdrażania. Skrypty NPM znajdziesz w pakiecie.json w folderze głównym, we właściwości o nazwie scripts
. Tam najczęściej napotkasz polecenia takie jak babel-node tools/run start
. Babel-node jest narzędziem CLI (nie przeznaczonym do użytku produkcyjnego), które na początku kompiluje plik ES6 tools/run
(run.plik JS znajdujący się w tools ) - W zasadzie narzędzie runner. Biegacz ten pełni funkcję argument i wykonuje go, co w tym przypadku jest start
- innym narzędziem (start.js) odpowiedzialny za łączenie plików źródłowych (zarówno Klienta jak i serwera) oraz uruchomienie aplikacji i serwera deweloperskiego (dev serverem będzie prawdopodobnie Webpack Dev Server lub Browsersync).
Mówiąc dokładniej, zacznij.js tworzy zarówno pakiety po stronie klienta, jak i serwera, uruchamia express server i po pomyślnym uruchomieniu inits Browser-sync, który w momencie pisania tego tekstu wyglądał tak (patrz react starter project dla najnowszego kodu).
const bs = Browsersync.create();
bs.init({
...(DEBUG ? {} : { notify: false, ui: false }),
proxy: {
target: host,
middleware: [wpMiddleware, ...hotMiddlewares],
},
// no need to watch '*.js' here, webpack will take care of it for us,
// including full page reloads if HMR won't work
files: ['build/content/**/*.*'],
}, resolve)
Ważną częścią jest proxy.target
, gdzie ustawiają adres serwera, który chcą proxy, który może być http://localhost:3000 , A Browsersync uruchamia serwer nasłuchujący na http://localhost:3001 , gdzie generowane zasoby są obsługiwane z automatycznym wykrywaniem zmian i wymianą modułu hot. Jak widać, istnieje inna właściwość konfiguracyjna files
z pojedynczymi plikami lub wzorami obserwuje zmiany i przeładowuje przeglądarkę, jeśli jakieś się pojawią, ale jak mówi komentarz, Webpack sam dba o oglądanie źródeł js z HMR, więc tam współpracują.
Teraz nie mam żadnego równoważnego przykładu takiej konfiguracji Grunt lub Gulp, ale z Gulp (i nieco podobnie z Grunt) można by napisać poszczególne zadania w gulpfile.js like
gulp.task('bundle', function() {
// bundling source files with some gulp plugins like gulp-webpack maybe
});
gulp.task('start', function() {
// starting server and stuff
});
Gdzie wykonywałbyś zasadniczo te same rzeczy, co w zestawie startowym, tym razem z zadaniem runner, który rozwiązuje pewne problemy za ciebie, ale przedstawia swoje własne problemy i pewne trudności podczas nauki użytkowania, i jak mówię, im więcej zależności masz, tym więcej może pójść źle. I to jest powód, dla którego lubię pozbywać się takich narzędzi.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-04-05 12:48:32
Aktualizacja Czerwiec 2018
Nauka współczesnego JavaScript jest trudna, jeśli nie byłeś tam od początku. Jeśli jesteś nowym przybyszem, pamiętaj, aby sprawdzić to doskonałe napisane, aby mieć lepszy przegląd.
Https://medium.com/the-node-js-collection/modern-javascript-explained-for-dinosaurs-f695e9747b70
Aktualizacja Lipiec 2017
[116]} ostatnio znalazłem naprawdę obszerny przewodnik z Zespół Grab o tym, jak podejść do rozwoju front-end w 2017 roku. Możesz to sprawdzić, jak poniżej.Https://github.com/grab/front-end-guide
Szukałem tego od dłuższego czasu, ponieważ istnieje wiele narzędzi i każdy z nich przynosi nam korzyści w innym aspekcie. Społeczność jest podzielona na narzędzia takie jak Browserify, Webpack, jspm, Grunt and Gulp
. Można również usłyszeć o Yeoman or Slush
. To nie jest naprawdę problem, to jest po prostu mylące dla wszystkich próbujących zrozumieć oczyścić drogę do przodu.
W każdym razie, chciałbym coś wnieść.
1. Menedżer Pakietów
Menedżery pakietów upraszczają instalowanie i aktualizowanie zależności projektu, które są bibliotekami takimi jak: jQuery, Bootstrap
, itp. - wszystko, co jest używane na twojej stronie i nie jest napisane przez Ciebie.
Przeglądanie wszystkich stron biblioteki, pobieranie i rozpakowywanie archiwów, kopiowanie plików do projektów - wszystko to jest zastępowane kilkoma poleceniami w terminal.
NPM
oznacza:Node JS package manager
pomaga zarządzać wszystkimi bibliotekami, na których opiera się Twoje oprogramowanie. Można zdefiniować swoje potrzeby w pliku o nazwiepackage.json
i uruchomićnpm install
w wierszu poleceń... następnie BANG, twoje pakiety są pobierane i gotowe do użycia. Może być używany zarówno dlafront-end and back-end
bibliotek.Bower
: W przypadku zarządzania pakietami front-end koncepcja jest taka sama w przypadku NPM. Wszystkie biblioteki są przechowywane w pliku o nazwiebower.json
następnie uruchombower install
w wierszu poleceń.
Największą różnicą między
Bower
aNPM
jest to, że NPM nie zagnieżdżone drzewo zależności, podczas gdy Bower wymaga płaskiego drzewa zależności, jak poniżej.Cytując z Jaka jest różnica między Bowerem a npm?
project root
[node_modules] // default directory for dependencies
-> dependency A
-> dependency B
[node_modules]
-> dependency A
-> dependency C
[node_modules]
-> dependency B
[node_modules]
-> dependency A
-> dependency D
project root
[bower_components] // default directory for dependencies
-> dependency A
-> dependency B // needs A
-> dependency C // needs B and D
-> dependency D
Są pewne aktualizacje na
npm 3 Duplication and Deduplication
, proszę otworzyć dokument, aby uzyskać więcej szczegółów.
Yarn
: nowy menedżer pakietów dlaJavaScript
opublikowany przezFacebook
ostatnio z pewnymi dodatkowymi zaletami w porównaniu doNPM
. I z włóczki, nadal można używać zarównoNPM
orazBower
rejestr, aby pobrać pakiet. Jeśli wcześniej zainstalowałeś pakiet,yarn
tworzy kopię w pamięci podręcznej, która ułatwiaoffline package installs
.jspm
: jest menedżerem pakietów do uniwersalnej ładowarki modułowejSystemJS
, zbudowanej na bazie dynamicznej ładowarki modułowejES6
. Nie jest to całkowicie nowy menedżer pakietów z własnym zestawem reguł, raczej działa na bazie istniejących źródeł pakietów. Po wyjęciu z pudełka działa zGitHub
inpm
. Ponieważ większość pakietów {[26] } bazuje naGitHub
, możemy zainstalować te pakiety również używającjspm
. Posiada rejestr, który zawiera listę większości powszechnie używanych pakietów front-end dla łatwiejszego instalacja.
Zobacz inne
Bower
orazjspm
: Menedżer pakietów: Bower vs jspm
2. Module Loader / Bundling
Większość projektów w dowolnej skali będzie miała swój kod dzielony między kilka plików. Możesz po prostu dołączyć każdy plik z indywidualnym tagiem <script>
, jednak <script>
ustanawia nowe połączenie http, a dla małych plików - co jest celem modułowości – czas na skonfigurowanie połączenia może potrwać znacznie dłużej niż przesyłanie danych. Podczas pobierania skryptów Żadna zawartość nie może być zmieniana na stronie.
- problem czasu pobierania można w dużej mierze rozwiązać, łącząc grupę prostych modułów w jeden plik i minifikując go.
E. g
<head>
<title>Wagon</title>
<script src=“build/wagon-bundle.js”></script>
</head>
-
[154]}wydajność jest kosztem elastyczności. Jeśli Twoje moduły mają wzajemne zależności, ten brak elastyczność może być showstopperem.
E. g
<head>
<title>Skateboard</title>
<script src=“connectors/axle.js”></script>
<script src=“frames/board.js”></script>
<!-- skateboard-wheel and ball-bearing both depend on abstract-rolling-thing -->
<script src=“rolling-things/abstract-rolling-thing.js”></script>
<script src=“rolling-things/wheels/skateboard-wheel.js”></script>
<!-- but if skateboard-wheel also depends on ball-bearing -->
<!-- then having this script tag here could cause a problem -->
<script src=“rolling-things/ball-bearing.js”></script>
<!-- connect wheels to axle and axle to frame -->
<script src=“vehicles/skateboard/our-sk8bd-init.js”></script>
</head>
Komputery mogą to zrobić lepiej niż ty, dlatego powinieneś użyć narzędzia, aby automatycznie połączyć wszystko w jeden plik.
Potem usłyszeliśmy o RequireJS
, Browserify
, Webpack
oraz SystemJS
-
RequireJS
: jestJavaScript
programem do ładowania plików i modułów. Jest zoptymalizowany do użytku w przeglądarce, ale może być używany w innych środowiskach JavaScript, takich jakNode
.
Np: myModule.js
// package/lib is a dependency we require
define(["package/lib"], function (lib) {
// behavior for our module
function foo() {
lib.log( "hello world!" );
}
// export (expose) foo to other modules as foobar
return {
foobar: foo
}
});
W main.js
, możemy importować myModule.js
jako zależność i używać jej.
require(["package/myModule"], function(myModule) {
myModule.foobar();
});
A następnie w naszym HTML
, możemy odnieść się do użycia z RequireJS
.
<script src=“app/require.js” data-main=“main.js” ></script>
Przeczytaj więcej o
CommonJS
iAMD
aby łatwo zrozumieć. związek między CommonJS, AMD i RequireJS?
-
Browserify
: ustawione, aby umożliwić korzystanie zCommonJS
sformatowanych modułów w przeglądarce. W związku z tym,Browserify
nie jest tak samo czytnikiem modułów, jak bundlerem modułów:Browserify
jest całkowicie narzędziem w czasie kompilacji, produkującym pakiet kodu, który może być załadowany po stronie klienta.
Zacznij od maszyny zbudowanej z zainstalowanym node & npm i pobierz pakiet:
npm install -g –save-dev browserify
Zapisz swoje moduły w formacie CommonJS
//entry-point.js
var foo = require('../foo.js');
console.log(foo(4));
I kiedy będzie szczęśliwy, wydaj polecenie do bundle:
browserify entry-point.js -o bundle-name.js
Browserify rekurencyjnie wyszukuje wszystkie zależności punktu wejścia i montuje ich w jednym pliku:
<script src=”bundle-name.js”></script>
-
Webpack
: łączy wszystkie twoje zasoby statyczne, w tymJavaScript
, obrazy, CSS i inne, w jeden plik. Umożliwia również przetwarzanie plików za pomocą różnych typów ładowarek. Możesz napisać swójJavaScript
za pomocą składniCommonJS
lubAMD
. Atakuje problem budowania w zasadniczo bardziej zintegrowany i opiniotwórczy sposób. WBrowserify
używaszGulp/Grunt
i długiej listy przekształceń i wtyczek, aby wykonać zadanie. Po wyjęciu z pudełka zapewnia wystarczającą moc, której zazwyczaj nie potrzebujesz.
Podstawowe użycie nie jest proste. Zainstaluj Webpack jak Browserify:
npm install -g –save-dev webpack
I przekazać polecenie punkt wejścia i plik wyjściowy:
webpack ./entry-point.js bundle-name.js
-
SystemJS
: jest to moduł ładujący, który może importować Moduły w czasie pracy w dowolnym z popularnych formatów używanych obecnie (CommonJS, UMD, AMD, ES6
). Zbudowany jest na bazie modułu ŁadowarkiES6
polyfill i jest wystarczająco inteligentny, aby wykryć używany format i odpowiednio go obsłużyć.SystemJS
może również transpile kod ES6 (zBabel
lubTraceur
) lub innych języków, takich jakTypeScript
iCoffeeScript
za pomocą wtyczek.
Chcesz wiedzieć, co to jest
node module
i dlaczego nie jest dobrze przystosowany do in-browser.Bardziej przydatny artykuł:
Dlaczego
jspm
iSystemJS
?Jednym z głównych celów
ES6
modułowości jest uczynienie go naprawdę prostym aby zainstalować i używać dowolnej biblioteki Javascript z dowolnego miejsca na Internet (Github
,npm
, itd.). Tylko dwie rzeczy są potrzebne:
- pojedyncze polecenie instalacji biblioteki
- jedna linijka kodu do zaimportowania biblioteki i użycia jej
Więc z
jspm
, możesz to zrobić.
- zainstaluj bibliotekę poleceniem:
jspm install jquery
- Importuj bibliotekę za pomocą jednej linii kodu, bez potrzeby zewnętrznego odniesienia wewnątrz pliku HTML.
Wyświetlacz.js
var $ = require('jquery'); $('body').append("I've imported jQuery!");
Wtedy ty skonfigurować te rzeczy w
System.config({ ... })
przed importowanie modułu. Zwykle po uruchomieniujspm init
pojawi się plik nazwaneconfig.js
w tym celu.Aby Skrypty działały, musimy załadować
system.js
iconfig.js
na stronę HTML. Następnie załadujemy plikdisplay.js
używając Ładowarka modułuSystemJS
.Indeks.html
<script src="jspm_packages/system.js"></script> <script src="config.js"></script> <script> System.import("scripts/display.js"); </script>
Zauważono: Możesz również użyć
npm
zWebpack
, ponieważ Angular 2 zastosował go. Odjspm
został opracowany do integracji zSystemJS
i działa na podstawie istniejącego źródłanpm
, więc Twoja odpowiedź zależy od Ciebie.
3. Task runner
Biegacze zadań i narzędzia budowania to przede wszystkim narzędzia wiersza poleceń. Dlaczego musimy ich używać: jednym słowem: automatyzacja . Mniej pracy trzeba wykonać podczas wykonywania powtarzalnych zadań, takich jak minifikacja, kompilacja, testowanie jednostkowe, linting, które wcześniej kosztowały nas wiele razy do wykonaj z wiersza poleceń lub nawet ręcznie.
-
Grunt
: możesz stworzyć automatyzację dla swojego środowiska programistycznego, aby wstępnie przetworzyć kody lub utworzyć Skrypty kompilacji z plikiem konfiguracyjnym i wydaje się to bardzo trudne do obsługi złożonego zadania. Popularny w ostatnich latach.
Każde zadanie w Grunt
jest szeregiem różnych konfiguracji wtyczek, które po prostu są wykonywane jedna po drugiej, w ściśle niezależnej i sekwencyjnej Moda.
grunt.initConfig({
clean: {
src: ['build/app.js', 'build/vendor.js']
},
copy: {
files: [{
src: 'build/app.js',
dest: 'build/dist/app.js'
}]
}
concat: {
'build/app.js': ['build/vendors.js', 'build/app.js']
}
// ... other task configurations ...
});
grunt.registerTask('build', ['clean', 'bower', 'browserify', 'concat', 'copy']);
-
Gulp
: Automatyzacja tak jakGrunt
, ale zamiast konfiguracji, możesz pisaćJavaScript
ze strumieniami, jakby to była aplikacja węzła. Wolę te dni.
To jest Gulp
przykładowa deklaracja zadań.
//import the necessary gulp plugins
var gulp = require('gulp');
var sass = require('gulp-sass');
var minifyCss = require('gulp-minify-css');
var rename = require('gulp-rename');
//declare the task
gulp.task('sass', function(done) {
gulp.src('./scss/ionic.app.scss')
.pipe(sass())
.pipe(gulp.dest('./www/css/'))
.pipe(minifyCss({
keepSpecialComments: 0
}))
.pipe(rename({ extname: '.min.css' }))
.pipe(gulp.dest('./www/css/'))
.on('end', done);
});
Zobacz więcej: https://medium.com/@preslavrachev/gulp-vs-grunt-why-one-why-the-other-f5d3b398edc4#.fte0nahri
4. Rusztowania narzędzia
-
Slush and Yeoman
: możesz za ich pomocą tworzyć projekty startowe. Na przykład planujesz zbudować prototyp z HTML i SCSS, a następnie zamiast ręcznie utworzyć jakiś folder, taki jak scss, css, img, czcionki. Możesz po prostu zainstalowaćyeoman
i uruchomić prosty skrypt. Potem wszystko dla Ciebie.
Znajdź więcej tutaj .
npm install -g yo
npm install --global generator-h5bp
yo h5bp
Zobacz więcej: https://www.quora.com/What-are-the-differences-between-NPM-Bower-Grunt-Gulp-Webpack-Browserify-Slush-Yeoman-and-Express
Moja odpowiedź nie jest tak naprawdę dopasowana do treści pytania, ale kiedy szukam tej wiedzy w Google, zawsze widzę pytanie na górze, więc postanowiłem odpowiedzieć w podsumowaniu. Mam nadzieję, że to wam pomogło.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-06-12 05:26:16
Możesz znaleźć porównanie techniczne na npmcompare
Porównanie browserify vs. grunt vs. gulp vs. webpack
Jak widać webpack jest bardzo dobrze utrzymany, a nowa wersja wychodzi średnio co 4 dni. Ale Gulp wydaje się mieć największą społeczność z nich wszystkich (z ponad 20K gwiazd na Github) Grunt wydaje się nieco zaniedbany (w porównaniu do innych)
Więc jeśli trzeba wybrać jeden nad drugim, to pójdę z Gulp
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-05-01 09:04:26
OK, wszystkie mają pewne podobieństwa, robią to samo dla Ciebie w inny i podobny sposób, dzielę je na 3 główne grupy Jak Poniżej:
1) moduły
Webpack i browserify jako popularne, działają jak biegacze zadań, ale z większą elastycznością, a także połączy wszystko razem jako ustawienie, dzięki czemu możesz wskazać wynik jako pakiet.js na przykład w jednym pliku, w tym CSS i Javascript, aby uzyskać więcej szczegółów każdy, spójrz na szczegóły poniżej:
Webpack
Webpack jest pakietem modułów dla nowoczesnych aplikacji JavaScript. Kiedy webpack przetwarza Twoją aplikację, rekurencyjnie buduje zależność wykresu, który zawiera każdy moduł potrzebny Twojej aplikacji, a następnie Pakiety wszystkie te moduły w niewielkiej liczbie pakietów-często tylko jeden - do załadowania przez przeglądarkę.
Jest to niewiarygodnie konfigurowalne, ale aby rozpocząć, wystarczy zrozumieć Cztery podstawowe pojęcia: wejście, wyjście, Ładowarki i wtyczki.
Niniejszy dokument ma na celu przedstawienie przeglądu tych pojęć, przy jednoczesnym podawaniu linków do szczegółowych pojęć specyficznych przypadki użycia.
Więcej tutaj
Browserify
Browserify jest narzędziem programistycznym, które pozwala nam pisać węzeł.js-style moduły, które kompilują się do użytku w przeglądarce. Tak jak node, piszemy nasze moduły w osobnych plikach, eksportując metody zewnętrzne i właściwości za pomocą modułu.eksport i zmienne eksportowe. Możemy nawet wymagać innych modułów za pomocą funkcji require, a jeśli pominiemy ścieżka względna zostanie rozwiązana do modułu w node_modules katalog.
Więcej tutaj
2) task runners
Gulp i grunt to biegacze zadań, w zasadzie to co robią, tworzenie zadań i uruchamianie ich kiedy tylko chcesz, np. instalujesz wtyczkę do minifigurki CSS i następnie uruchom go za każdym razem, aby zrobić minifying, więcej szczegółów na temat każdego:
Gulp
Łyk.js to open-source JavaScript toolkit firmy Fractal Innovations i społeczności open source na Githubie, używanej jako streaming build system W front-end web development. Jest to zadanie zbudowane na Węzeł.JS i Node Package Manager (npm), wykorzystywane do automatyzacji czasochłonne i powtarzalne zadania związane z tworzeniem stron internetowych, takie jak minifikacja, konkatenacja, burzenie pamięci podręcznej, testy jednostkowe, linting, optymalizacja itp. gulp wykorzystuje podejście code-over-configuration do definiować swoje zadania i polega na małych, jednostronnych wtyczkach do Wyprowadźcie ich. gulp ekosystem ma 1000 + takich wtyczek udostępnionych do wyboru.
Więcej tutaj
Grunt
Grunt to JavaScript task runner, narzędzie służące do automatycznego wykonywać często używane zadania, takie jak minifikacja, kompilacja, Jednostka testowanie, linting itp. Używa interfejsu wiersza poleceń do uruchamiania niestandardowych zadania zdefiniowane w pliku (znany jako Gruntfile). Grunt został stworzony przez Ben Alman i jest napisane w Node.js. Jest dystrybuowany za pośrednictwem npm. Obecnie dostępnych jest ponad pięć tysięcy wtyczek w Grunt ekosystem.
Więcej tutaj
3) Zarządzanie pakietami
Menedżerowie pakietów, to co robią to zarządzanie wtyczkami, których potrzebujesz w swojej aplikacji i instalowanie ich za ciebie przez github itp korzystanie z pakietu.json, bardzo przydatny do aktualizacji modułów, zainstalowania ich i udostępniania aplikacji w całej, więcej szczegółów dla każdego:
Npm
Npm jest menedżerem pakietów dla języka programowania JavaScript. Informatyka jest domyślnym menedżerem pakietów dla środowiska uruchomieniowego JavaScript Węzeł.js. Składa się z klienta wiersza poleceń, zwanego również npm, oraz internetowa baza pakietów publicznych, zwana rejestrem npm. Na rejestr jest dostępny za pośrednictwem klienta, a dostępne pakiety mogą być przeglądane i wyszukiwane za pośrednictwem strony internetowej npm.
Więcej tutaj
Bower
Bower może zarządzać komponentami zawierającymi HTML, CSS, JavaScript, czcionki lub nawet plików graficznych. Bower nie łączy ani nie minifikuje kodu ani nie cokolwiek innego-po prostu instaluje odpowiednie wersje pakietów potrzebujesz i ich zależności. Aby rozpocząć, Bower działa pobierając i instalując pakiety z / align = "left" / polowania, znajdowania, pobierania i ratowania rzeczy, których szukasz. Bower śledzi te pakiety w plik manifestu, bower.json.
Więcej tutaj
I najnowszy menedżer pakietów, którego nie należy przegapić, jest młody i szybki w prawdziwym środowisku pracy w porównaniu do npm, którego głównie używałem wcześniej, do ponownej instalacji modułów, sprawdza dwukrotnie folder node_modules, aby sprawdzić istnienie modułu, wydaje się również instalować Moduły zajmuje mniej czasu:
Przędza
Yarn jest menedżerem pakietów dla Twojego kodu. Pozwala na wykorzystanie i udostępniaj kod innym programistom z całego świata. Yarn does this szybko, bezpiecznie i niezawodnie, dzięki czemu nigdy nie musisz się martwić.
Yarn pozwala na wykorzystanie rozwiązań innych programistów do różnych problemy, ułatwiając rozwój oprogramowania. Jeśli masz problemy, możesz zgłaszać problemy lub przyczyniać się do nich, a gdy problem jest naprawiony, możesz użyć przędzy, aby utrzymać to wszystko na bieżąco.
Kod jest współdzielony przez coś, co nazywa się pakietem (czasami określanym jako moduł). Pakiet zawiera również cały kod udostępniany w pakiecie.plik json opisujący pakiet.
Więcej tutaj
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-02-16 00:11:11
Mała uwaga o npm: npm3 próbuje zainstalować zależności w sposób płaski
Https://docs.npmjs.com/how-npm-works/npm3#npm-v3-dependency-resolution
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-04-14 15:53:01
Czym jest webpack & webpack-dev-server? Oficjalna dokumentacja mówi, że jest to moduł bundler, ale dla mnie to tylko zadanie runner. Co za różnica?
Webpack-dev-server jest serwerem WWW do przeładowywania na żywo, który Webpack jest używany przez programistów, aby uzyskać natychmiastową informację zwrotną o tym, co robią. Należy go stosować tylko podczas opracowywania produktu.
Ten projekt jest mocno inspirowany nof5 jednostkowym narzędziem testowym.
Webpack jak sama nazwa wskazuje utworzy pojedynczy packwiek dla www. Pakiet zostanie zminimalizowany i połączony w jeden plik(nadal żyjemy w epoce HTTP 1.1). Webpack robi magię łączenia zasobów (JavaScript, CSS, obrazy) i wstrzykiwania ich w następujący sposób: <script src="assets/bundle.js"></script>
.
Może być również nazywany module bundler ponieważ musi rozumieć zależności modułów oraz jak je przechwytywać i łączyć ze sobą.
Gdzie używasz browserify? Czy nie możemy zrobić tego samego z importem node/ES6?
Możesz użyć Browserify do dokładnie tych samych zadań, w których chcesz użyćWebpack . - Webpack jest jednak bardziej kompaktowy.
Zauważ, że Funkcje modułu ES6 W Webpack2 używają systemu .import , którego natywnie nie obsługuje Żadna przeglądarka.
Możesz zapomnij Gulp, Grunt, Brokoli, Brunch i Bower . Bezpośrednio użyj skryptów wiersza poleceń npm i możesz wyeliminować dodatkowe pakiety, takie jak te tutaj dla Gulp :Kiedy użyłbyś gulp / grunt nad wtyczkami npm+?
var gulp = require('gulp'),
minifyCSS = require('gulp-minify-css'),
sass = require('gulp-sass'),
browserify = require('gulp-browserify'),
uglify = require('gulp-uglify'),
rename = require('gulp-rename'),
jshint = require('gulp-jshint'),
jshintStyle = require('jshint-stylish'),
replace = require('gulp-replace'),
notify = require('gulp-notify'),
Możesz prawdopodobnie użyć generatorów plików konfiguracyjnych Gulp i Grunt podczas tworzenia plików konfiguracyjnych dla Twojego projektu. W ten sposób nie musisz instalować Yeoman ani podobnych narzędzi.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-03-17 15:14:45
Yarn jest najnowszym menedżerem pakietów, który prawdopodobnie zasługuje na wzmiankę. Tak, tam: https://yarnpkg.com/
Afaik, może pobierać zarówno zależności npm, jak i bower i ma inne cenione funkcje.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-10-17 14:18:43
StackShare zapewnia side-by-side (lub stos) trzech narzędzi jednocześnie.
Oto dla npm vs. Bower vs. Browserify i dla gulp vs. Webpack vs. Grunt
Na tych stronach porównawczych można znaleźć:
- liczba głosów, które każdy otrzymał od społeczności StackShare
- które firmy używają ich w swoim stosie technologii
- poziom oprocentowania dla każdego okresu
- plusy dla każdego narzędzie
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-30 14:31:23
Webpack
to bundler. Podobnie jak {[2] } wygląda w bazie kodowej dla żądań modułów (require
lub import
) i rozwiązuje je rekurencyjnie. Co więcej, możesz skonfigurować Webpack
, aby rozwiązywać nie tylko Moduły podobne do JavaScript, ale także CSS, obrazy, HTML, dosłownie wszystko. Co mnie szczególnie ekscytuje Webpack
, możesz łączyć zarówno skompilowane, jak i dynamicznie ładowane Moduły w tej samej aplikacji. W ten sposób można uzyskać rzeczywisty wzrost wydajności, szczególnie przez HTTP / 1.x. jak dokładnie to robisz opisałem z przykłady tutaj http://dsheiko.com/weblog/state-of-javascript-modules-2017 /
Jako alternatywę dla bundlera można pomyśleć o Rollup.js
(https://rollupjs.org/), który optymalizuje kod podczas kompilacji, ale usuwa wszystkie znalezione nieużywane kawałki.
Dla AMD
, zamiast RequireJS
można wybrać natywne ES2016 module system
, ale ładowane z System.js
(https://github.com/systemjs/systemjs )
Poza tym, chciałbym zauważyć, że npm
jest często używany jako narzędzie automatyzujące jak grunt
lub gulp
. Sprawdź https://docs.npmjs.com/misc/scripts . ja osobiście chodzę teraz ze skryptami npm, unikając tylko innych narzędzi automatyzacji, choć kiedyś bardzo lubiłem grunt
. Z innymi narzędziami musisz polegać na niezliczonych wtyczkach do pakietów, które często nie są dobrze napisane i nie są aktywnie utrzymywane. npm
zna swoje pakiety, więc wywołujesz dowolny z lokalnie zainstalowanych pakietów po nazwie, jak:
{
"scripts": {
"start": "npm http-server"
},
"devDependencies": {
"http-server": "^0.10.0"
}
}
Właściwie z reguły nie potrzebujesz żadnej wtyczki, jeśli Pakiet obsługuje CLI.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-08-14 09:43:03