NPM vs Bower vs Browserify vs Gulp vs Grunt vs Webpack
Je vais essayer de résumer mes connaissances sur le plus populaire JavaScript, des gestionnaires de paquets, bundlers, et le groupe de coureurs. S'il vous plaît corrigez-moi si je me trompe:
npm
&bower
sont les gestionnaires de paquets. Ils suffit de télécharger les dépendances et ne savent pas comment construire des projets sur leur propre. Ce qu'ils savent faire est d'appelerwebpack
/gulp
/grunt
après la récupération de toutes les dépendances.bower
est commenpm
, mais s'appuie aplatie dépendances arbres (contrairement ànpm
qui ne récursivement). Sensnpm
récupère les dépendances pour chaque dépendance (peut extraire de même un peu de temps), alors quebower
attend de vous d'inclure manuellement sous-dépendances. Parfoisbower
etnpm
sont utilisés ensemble pour le front-end et back-end (puisque chaque mégaoctet comptent sur le front-end).grunt
etgulp
de tâche sont les coureurs à automatiser tout ce qui peut être automatisé (c'est à dire de compiler CSS/Sass, optimiser les images, faire un paquet et minify/transpile il).grunt
vsgulp
(c'est commemaven
vsgradle
ou de configuration vs. le code). Grunt est basé sur la configuration indépendante des tâches, chaque tâche s'ouvre/poignées/ferme le fichier. Gulp nécessite moins de quantité de code et est basé sur le Nœud flux, ce qui permet de construire pipe chaînes (w/o réouverture le même fichier) et le rend plus rapide.webpack
(webpack-dev-server
) - pour moi, c'est une tâche de coureur chaud de rechargement des modifications qui vous permet d'oublier toutes JS/CSS watchers.npm
/bower
+ les plugins peuvent remplacer la tâche des coureurs. Leurs compétences se croisent souvent il y a donc des implications différentes si vous avez besoin d'utilisergulp
/grunt
surnpm
+ plugins. Mais la tâche des coureurs sont certainement mieux pour les tâches complexes (par exemple, "à chaque build créer bundle, transpile de ES6 à l'ES5, l'exécuter sur tous les navigateurs émulateurs, faire des captures d'écran et de la déployer sur dropbox via ftp").browserify
permet l'emballage nœud de modules pour les navigateurs.browserify
vsnode
'srequire
est en fait AMD vs CommonJS.
Questions:
- Qu'est-ce que
webpack
&webpack-dev-server
? La documentation officielle dit que c'est un module de système de regroupement, mais pour moi c'est juste une task runner. Quelle est la différence? - Où voulez-vous utiliser
browserify
? Ne pouvons-nous pas faire de même avec node/ES6 importations? - Quand vous utilisez
gulp
/grunt
surnpm
+ plugins? - Veuillez fournir des exemples lorsque vous devez utiliser une combinaison
- temps d'ajouter dans cumulatif? 😝
- c'est un très raisonnable. pseudo web-développeurs comme moi trébucher sur tous les paquets qui sont mis en œuvre dans un hebdomadaire de la mode..
- hackernoon.com/...
- Je suis totalement nouveau à cela, et il semble complètement cinglé...
- peut-être avez vous manqué de l'encourager pièces dans les sections commentaires 🙂
- Le "recommandé" commentaire que je viens de lire était encore pire! D: je veux juste construire un fricking page statique qui utilise un couple de CSS/JS libs, et de bénéficier d'un outil qui permet de compiler qui, ensemble,... Jeter un peu de moteur de template pour donner un peu de repos à mon Ctrl-C/Ctrl-V doigts, et ce serait parfait... Et encore, des heures, à la encore à essayer de trouver un moyen d'aller...
- son une un investissement de temps. après la mise en place parfaitement que vous êtes prêt à voler
- jspm qui utilise cumulatif de trop.
- J'ai été développeur web pour les 16 ans et+ et beaucoup de qui était sous le Microsoft .NET parapluie où ils nous hébergea pendant de nombreuses années à partir de ces outils avant de déchaîner l'enfer sur nous par coup "être cool" avec tout cela à la fois (même si leur IDE ne pouvais pas gérer [j'entends vs2017 est mieux, mais je vais rester avec WebStorm maintenant {Digresption}]). Anywho, ces choses compliquent le développement de l'infrastructure et de demander beaucoup plus le temps de configuration initiale pour l'obtenir juste, mais une fois en place et de travail, l'homme c'est doux!
- Temps d'ajouter des Fils (yarnpkg.com) ?
- semble un peu naïf de s'imaginer ça va vraiment être un "investissement de temps'... après quelques années de travail avec la technologie, la motivation à apprendre de ces couches externes de la complication est, pour moi, grandement diminué par l'amère expérience de choses qui semblaient être au travail le bien-être obsolète. Tendance web tech comme ceci a une mauvaise odeur à partir de ce POV (et je ne suis même pas vieux).
- Je pense que vous devriez également ajouter le Babel dans la liste.
Vous devez vous connecter pour publier un commentaire.
Webpack et Browserify
Webpack et Browserify de faire à peu près le même travail, ce qui est traitement de votre code doit être utilisé dans un environnement cible (principalement navigateur, mais vous pouvez cibler d'autres environnements, comme le Node). Le résultat de ce traitement est l'un ou plusieurs bundles - assemblés scripts adaptés pour cibler l'environnement.
Par exemple, disons que vous avez écrit un ES6 code divisés en modules et veulent être en mesure d'exécuter dans le navigateur. Si ces modules sont le Nœud modules de navigateur ne les comprennent pas, car ils n'existent que dans le Nœud de l'environnement. ES6 modules aussi de ne pas travailler dans les anciens navigateurs comme IE11. En outre, vous pourriez avoir expérimentales utilisées fonctionnalités de langage (ES suivant les propositions que les navigateurs n'implémentent pas encore fait d'exécuter un tel script serait tout simplement de générer des erreurs. Ces outils comme Webpack et Browserify résoudre ces problèmes par la traduction de ce code à un formulaire de navigateur est capable d'exécuter. En plus de cela, ils rendent possible une grande variété d'optimisations sur ces bottes.
Cependant, Webpack et Browserify diffèrent à de nombreux égards, Webpack propose de nombreux outils par défaut (par exemple, le code splitting), tandis que Browserify pouvez le faire seulement après le téléchargement des plugins mais en utilisant à la fois conduit à des résultats très similaires. Il se résume à la préférence personnelle (Webpack est plus à la mode). Btw, Webpack est pas une tâche coureur, il est juste processeur de vos fichiers (il les traite par des chargeurs et des plugins) et il peut être exécuté (entre autres) par un groupe de coureur.
Webpack Serveur De Dev
Webpack Dev Server fournit une solution similaire à Browsersync - un serveur de développement, où vous pouvez déployer votre application rapidement que vous travaillez, et de vérifier vos progrès en matière de développement immédiatement avec le serveur de dev mises à jour automatiquement le navigateur sur les modifications de code ou encore la propagation changé de code du navigateur, sans avoir à recharger avec ce qu'on appelle remplacement de module à chaud.
Tâche coureurs vs MNP scripts
J'ai été en utilisant Gulp pour sa concision et facile la tâche d'écriture, mais ont découvert plus tard j'ai besoin ni Avaler ni Grognement à tous. Tout ce que j'ai jamais nécessaire, pourrait avoir été fait à l'aide de NPM l'exécution des scripts de la 3e partie des outils par le biais de leur API. Le choix entre Gulp, Grunt ou NPM scripts dépend du goût et de l'expérience de votre équipe.
Lorsque des tâches dans Gulp ou Grunt sont faciles à lire, même pour ceux qui ne sont pas familiers avec le JS, c'est encore un autre outil d'exiger et d'apprendre et personnellement, je préfère pour affiner mes dépendances et de faire des choses simples. D'autre part, le remplacement de ces tâches avec la combinaison de la NGP scripts et (probablement JS) les scripts qui exécutent ces outils 3ème partie (par exemple. Nœud de script de configuration et l'exécution de rimraf pour le nettoyage) pourrait être plus difficile. Mais dans la majorité des cas, ces trois sont égaux en termes de résultats.
Exemples
Comme pour les exemples, je vous suggère de jeter un oeil à ce Réagir starter projet, qui vous montre une jolie combinaison de MNP et les scripts JS couvrant l'ensemble de la construire et de déployer des processus. Vous pouvez trouver ces MNP scripts dans le paquet.json dans le dossier racine, dans une propriété nommée
scripts
. Il vous permettra surtout à la rencontre des commandes commebabel-node tools/run start
. Babel-nœud est un outil CLI (pas fait pour une utilisation en production), qui, à première compile ES6 fichiertools/run
(run.js fichier situé dans outils) - en fait un coureur de l'utilitaire. Ce coureur prend une fonction en tant qu'argument et l'exécute, ce qui dans ce cas eststart
- un autre utilitaire (start.js) responsable pour le regroupement des fichiers source (client et serveur) et de lancer l'application et le développement du serveur (le serveur de dev sera probablement Webpack Serveur de Dev ou Browsersync).Parlant plus précisément, start.js crée à la fois côté client et serveur faisceaux, commence à exprimer serveur et après un démarrage réussi inits Navigateur-sync, qui, au moment de l'écriture ressemblait à ça (veuillez vous référer à réagir starter projet pour le nouveau code).
L'important, c'est
proxy.target
, où ils ont mis l'adresse du serveur qu'ils veulent proxy, ce qui pourrait être http://localhost:3000, et Browsersync démarre un serveur qui écoute sur http://localhost:3001, où les actifs générés sont servis avec changement automatique de détection et de remplacement de module à chaud. Comme vous pouvez le voir, il y a une autre propriété de configurationfiles
avec des fichiers individuels ou des modèles de Navigateur de synchronisation des montres pour les changements et recharge le navigateur si certains se produire, mais que le commentaire dit, Webpack prend soin de regarder la js sources par lui-même avec HMR, de sorte qu'ils coopérer il.Maintenant, je n'ai pas d'équivalent exemple de ces Grunt ou Gulp configuration, mais avec Gulp (et un peu de la même façon avec Grunt), on peut écrire les tâches individuelles dans gulpfile.js comme
où vous seriez essentiellement à peu près la même chose que dans le starter-kit, cette fois avec task runner, ce qui résout certains problèmes pour vous, mais présente ses propres problèmes et à des difficultés lors de l'apprentissage de l'usage, et comme je l'ai dit, plus les dépendances que vous avez, plus qui peut aller mal. Et c'est la raison pour laquelle j'aime pour se débarrasser de ces outils.
webpack-dev-server
etBrowsersync
pour exécuter un serveur, exemple de tâches grunt et gulp etc. Et le déplacement de réagir starter exemples de projets pour la réponse elle-même sera également utile, car repo peut changer le code dans l'avenir. (Ou le lien de l'instantané exact de l'opération)Mise À Jour Octobre 2018
Si vous êtes encore incertain à propos de dev Front-end, pouvez prendre un coup d'oeil rapide est une excellente ressource ici.
https://github.com/kamranahmedse/developer-roadmap
Mise À Jour Juin 2018
D'apprentissage moderne JavaScript est difficile si vous n'avez pas été là depuis le début. Si vous êtes le nouveau venu, n'oubliez pas de vérifier cette excellente écrit pour avoir une meilleure vue d'ensemble.
https://medium.com/the-node-js-collection/modern-javascript-explained-for-dinosaurs-f695e9747b70
Mise À Jour En Juillet 2017
Récemment, j'ai trouvé un guide complet de Saisir de l'équipe sur la façon d'approcher front-end en 2017. Vous pouvez le vérifier ci-dessous.
https://github.com/grab/front-end-guide
J'ai également été à la recherche pour ce très peu de temps car il y a beaucoup d'outils là-bas, et chacun d'eux des avantages sous un autre aspect. La communauté est divisée à travers des outils comme
Browserify, Webpack, jspm, Grunt and Gulp
. Vous pourriez aussi entendre parler deYeoman or Slush
. Ce n'est pas vraiment un problème, il est juste confus pour tout le monde essaie de comprendre clairement la voie à suivre.De toute façon, je voudrais apporter quelque chose.
1. Le Gestionnaire De Package
Les gestionnaires de paquets de simplifier l'installation et la mise à jour des dépendances du projet, qui sont des librairies telles que:
jQuery, Bootstrap
, etc - tout ce qui est utilisé sur votre site et n'est pas écrite par vous.De parcourir toute la bibliothèque de sites web, le téléchargement et décompression des archives, la copie de fichiers dans le cadre des projets — tout cela est remplacé par un petit nombre de commandes dans le terminal.
NPM
signifie:Node JS package manager
vous aide à gérer toutes les bibliothèques de votre logiciel s'appuie sur. Vous définissez vos besoins dans un fichier appelépackage.json
et exécuternpm install
dans la ligne de commande... puis BANG, vos paquets sont téléchargés et prêt à l'emploi. Peut être utilisé à la fois pourfront-end and back-end
bibliothèques.Bower
: pour le front-end de gestion de paquets, le concept est de même avec les MNP. Tous vos bibliothèques sont stockées dans un fichier nommébower.json
puis exécutezbower install
dans la ligne de commande.NPM
Bower
Fil
: Un nouveau gestionnaire de paquets pourJavaScript
publié parFacebook
récemment avec un peu plus d'avantages par rapport àNPM
. Et de Fil, vous pouvez toujours utiliser les deuxNPM
etBower
de registre pour récupérer le colis. Si vous avez installé un paquet avant,yarn
crée une copie en cache, ce qui faciliteoffline package installs
.jspm
: est un gestionnaire de paquet pour leSystemJS
universel de chargeur de module, construit sur le haut de la dynamiqueES6
chargeur de module. Il n'est pas un tout nouveau gestionnaire de paquets avec son propre ensemble de règles, plutôt qu'il travaille sur de sources de paquets. Hors de la boîte, il fonctionne avecGitHub
etnpm
. Comme la plupart desBower
base de forfaits sont basés surGitHub
, nous pouvons installer les paquets à l'aide dejspm
ainsi. Il a un registre qui répertorie les plus couramment utilisés avant la fin de paquets pour faciliter l'installation.2. Chargeur De Module/Regroupement
La plupart des projets de toute envergure, ont leur code partagé entre un certain nombre de fichiers. Vous pouvez simplement inclure chaque fichier avec une personne
<script>
tag, toutefois,<script>
établit une nouvelle connexion http, et pour les petits fichiers – qui est un objectif de modularité – le temps de la connexion peut prendre beaucoup plus longtemps que le transfert de données. Alors que les scripts sont en cours de téléchargement, aucun contenu ne peut être modifié sur la page.E. g
E. g
Les ordinateurs peuvent faire mieux que vous pouvez, et c'est pourquoi vous devez utiliser un outil automatiquement bundle tout dans un seul fichier.
Ensuite nous avons entendu parler
RequireJS
,Browserify
,Webpack
etSystemJS
RequireJS
: est unJavaScript
fichier et chargeur de module. Il est optimisé pour le navigateur qu'il utilise, mais il peut être utilisé dans d'autres environnements JavaScript, commeNode
.E. g: myModule.js
Dans
main.js
, on peut importermyModule.js
comme la dépendance et de l'utiliser.Et puis dans notre
HTML
, nous pouvons nous référer à utiliser avecRequireJS
.Browserify
: énoncés pour permettre l'utilisation deCommonJS
formaté modules dans le navigateur. Par conséquent,Browserify
n'est pas tant un chargeur de module en module bundler:Browserify
est entièrement un au moment de la construction de l'outil, la production d'un faisceau de code qui peut ensuite être chargé côté client.Commencer avec une machine de compilation qui a noeud & npm installé, et obtenir le package:
Écrire vos modules dans
CommonJS
formatEt lorsque heureux, émettez la commande de faisceau:
Browserify de manière récursive trouve toutes les dépendances de point d'entrée et les assemble en un seul fichier:
Webpack
: Il regroupe l'ensemble de vos statique actifs, y comprisJavaScript
, les images, les CSS et plus, en un seul fichier. Il vous permet également de traiter les fichiers par le biais de différents types de chargeurs. Vous pouvez écrire votreJavaScript
avecCommonJS
ouAMD
modules de syntaxe. Il s'attaque à la construction problème dans un de fondamentalement plus intégrée et plus opiniâtre manière. DansBrowserify
vous utilisezGulp/Grunt
et une longue liste de transformations et de plugins pour faire le travail.Webpack
offre assez de puissance de la boîte que vous n'avez généralement pas besoinGrunt
ouGulp
à tous.D'utilisation de base est au-delà de la simple. Installer Webpack comme Browserify:
Et passer la commande d'un point d'entrée et un fichier de sortie:
SystemJS
: est un module loader peut importer des modules au moment de l'exécution dans l'un des formats populaires utilisé aujourd'hui (CommonJS, UMD, AMD, ES6
). Il est construit sur le haut de laES6
chargeur de module polyfill et est assez intelligent pour détecter le format utilisé et gérer de manière appropriée.SystemJS
pouvez également transpile ES6 code (avecBabel
ouTraceur
) ou d'autres langues telles que leTypeScript
etCoffeeScript
à l'aide de plugins.3. Task runner
Tâche des coureurs et des outils de développement sont principalement des outils de ligne de commande. Pourquoi nous avons besoin de les utiliser: En un mot: automatisation. Le moins de travail que vous avez à faire lors de l'exécution de tâches répétitives comme minification, la compilation, les tests unitaires, peluchage qui, auparavant, nous a coûté beaucoup de temps à faire avec la ligne de commande ou même manuellement.
Grunt
: Vous pouvez créer automatisation pour votre environnement de développement pour pré-traiter les codes ou de créer des scripts de compilation avec un fichier de config et il semble très difficile de gérer une tâche complexe. Populaire dans les dernières années.Chaque tâche dans
Grunt
est un tableau de différents plugin configurations, que tout simplement exécutés l'un après l'autre, dans un strictement indépendant, et de façon séquentielle.Trait
: Automatisation commeGrunt
mais au lieu de configurations, vous pouvez écrireJavaScript
avec des cours d'eau, c'est un nœud de l'application. Préférez ces jours-ci.C'est un
Gulp
exemple de déclaration de la tâche.4. Échafaudage outils
Slush and Yeoman
: Vous pouvez créer starter avec eux des projets. Par exemple, vous envisagez de construire un prototype avec HTML et SCSS, alors au lieu de créer manuellement un dossier comme scss, css, img, des polices. Vous pouvez simplement installeryeoman
et exécuter un script simple. Ensuite, tout est là pour vous.Trouver plus de ici.
Ma réponse n'est pas vraiment mis en correspondance avec le contenu de la question, mais quand je suis à la recherche de ces connaissances sur Google, je vois toujours la question sur le dessus, de sorte que j'ai décidé d'y répondre en résumé. Espérons que vous les gars ont trouvé très utile.
OK, ils ont tous obtenu quelques similitudes, ils font les mêmes choses pour vous dans différentes et des moyens similaires, je les divise en 3 groupes principaux comme ci-dessous:
1) Module bundlers
webpack et browserify comme des plus populaires, de travailler comme tâche de coureurs, mais avec plus de flexibilité, mais aussi il faudra regrouper tout vos réglages, vous pouvez pointer vers le résultat que bundle.js par exemple, dans un fichier unique, y compris le CSS et le Javascript, pour plus de détails de chaque, voir les détails ci-dessous:
webpack
plus ici
browserify
plus ici
2) groupe de coureurs
gulp et grognement de tâche sont les coureurs, en gros ce qu'ils font, création de tâches et de les exécuter à chaque fois que vous voulez, par exemple, vous installez un plugin pour minifier vos CSS et ensuite l'exécuter à chaque fois pour faire minifying, plus de détails sur chaque:
gulp
plus ici
grunt
plus ici
3) les gestionnaires de paquets
les gestionnaires de paquets, ce qu'ils font, c'est de gérer les plugins dont vous avez besoin dans votre application et de l'installer pour vous grâce à github, etc à l'aide de paquet.json, très pratique pour vous mettre à jour des modules, de les installer et de partage de votre application à travers, plus de détails pour chaque:
mnp
plus ici
bower
plus ici
et le plus récent, le gestionnaire de package à ne pas manquer, il est jeune et rapide en milieu réel de travail comparer à mnp, qui j'ai été en utilisant la plupart du temps d'avant, pour la réinstallation des modules, il ne vérifie le dossier node_modules de vérifier l'existence du module, semble également installer les modules prend moins de temps:
fil
plus ici
Vous pouvez trouver des techniques de comparaison sur npmcompare
La comparaison de browserify vs grunt vs gulp vs webpack
Comme vous pouvez le voir webpack est très bien entretenu avec une nouvelle version qui sort tous les 4 jours en moyenne.
Mais Gulp semble avoir la plus grande communauté de tous (avec plus de 20K étoiles sur Github)
Grunt semble un peu négligée (par rapport aux autres)
Donc si besoin de choisir l'un sur l'autre, j'irais avec Gulp
Une petite remarque à propos de la ngp: npm3 essaie d'installer les dépendances dans un plat de façon
https://docs.npmjs.com/how-npm-works/npm3#npm-v3-dependency-resolution
dedupe
option de faire la même choseFil récent est un gestionnaire de paquets qui mérite sans doute d'être mentionné. Donc, il y a : https://yarnpkg.com/
Autant que je sache, il peut aller chercher les deux mnp et bower dépendances et a apprécié autres fonctionnalités.
webpack-dev-serveur est un live de rechargement serveur web qui Webpack les développeurs utilisent pour obtenir une rétroaction immédiate de ce qu'ils font. Il ne doit être utilisé au cours du développement.
Ce projet est fortement inspiré par la nof5 unité de l'outil de test.
Webpack comme son nom l'indique, permettra de créer un UNIQUE packâge pour la web. Le colis devra être réduite au minimum, et combinés en un seul fichier (nous vivons encore dans HTTP 1.1 l'âge). Webpack fait la magie de la combinaison des ressources (JavaScript, CSS, images) et de l'injection comme ceci:
<script src="assets/bundle.js"></script>
.Il peut aussi être appelé module bundler, car il doit comprendre les dépendances des modules, et comment attraper les dépendances et à les regrouper ensemble.
Vous pouvez utiliser Browserify sur exactement les mêmes tâches où vous utiliseriez Webpack. – Webpack est plus compact, mais.
Noter que le ES6 chargeur de module caractéristiques dans Webpack2 utilisez Système.importation, qui n'est pas un simple navigateur prend en charge nativement.
Vous pouvez oublier Gulp, Grunt, Brokoli, le Brunch et Bower. Directement utiliser npm ligne de commande des scripts au lieu et vous pouvez éliminer les paquets supplémentaires de ce genre ici pour Gulp:
Vous pouvez probablement utiliser Gulp et Grunt fichier de config générateurs lors de la création des fichiers de configuration pour votre projet. De cette façon, vous n'avez pas besoin d'installer Yeoman ou d'outils similaires.
Webpack
est un bundler. CommeBrowserfy
il se regarde dans le code de base pour le module de requêtes (require
ouimport
) et les résout de manière récursive. Ce qui est plus, vous pouvez configurerWebpack
pour résoudre non seulement le JavaScript comme les modules, mais CSS, images, HTML, littéralement tout. Qu'est-ce surtout me rend heureux au sujet deWebpack
, vous pouvez combiner les deux compilés et les modules chargés dynamiquement dans la même application. Donc obtenir un réel gain de performances, en particulier sur HTTP/1.x. Exactement comment vous vous le faites que j'ai décrit avec des exemples ici http://dsheiko.com/weblog/state-of-javascript-modules-2017/Comme une alternative de bundler l'on peut penser de
Rollup.js
(https://rollupjs.org/), ce qui optimise le code lors de la compilation, mais le décapage des morceaux inutilisés.Pour
AMD
, au lieu deRequireJS
on peut aller avec les autochtonesES2016 module system
, mais chargé avecSystem.js
(https://github.com/systemjs/systemjs)D'ailleurs, je tiens à souligner que
npm
est souvent utilisé comme une automatisation de l'outil commegrunt
ougulp
. Découvrez https://docs.npmjs.com/misc/scripts. Personnellement, je aller maintenant avec npm scripts uniquement pour éviter d'autres outils d'automatisation, bien que dans le passé, j'ai été très bien dansgrunt
. Avec d'autres outils que vous devez compter sur de nombreux plugins pour les paquets, qui ne sont souvent pas à l'écrit et de ne pas être activement maintenu.npm
sait que ses paquets, si vous appelez à l'un de localement des paquets installés par un nom comme:En fait, vous ne ont pas besoin de plugin si le package prend en charge la CLI.