Mise à jour d'octobre 2018
Si vous n'êtes toujours pas sûr du développement frontal, vous pouvez jeter un coup d'œil à une excellente ressource ici.
https://github.com/kamranahmedse/developer-roadmap
Mise à jour de juin 2018
Apprendre le JavaScript moderne est difficile si vous n'êtes pas là depuis le début. Si vous êtes le nouveau venu, n'oubliez pas de consulter cet excellent écrit pour avoir un meilleur aperçu.
https://medium.com/the-node-js-collection/modern-javascript-explained-for-dinosaurs-f695e9747b70
Mise à jour de juillet 2017
Récemment, j'ai trouvé un guide complet de l'équipe Grab sur la façon d'aborder le développement front-end en 2017. Vous pouvez le consulter comme ci-dessous.
https://github.com/grab/front-end-guide
Je l'ai également cherché pendant un certain temps, car il existe de nombreux outils et chacun d'entre eux nous apporte un avantage différent. La communauté est divisée entre des outils comme Browserify, Webpack, jspm, Grunt and Gulp
. Vous pourriez également entendre parler de Yeoman or Slush
. Ce n'est pas un problème, c'est juste une source de confusion pour tous ceux qui essaient de comprendre une voie claire à suivre.
Quoi qu'il en soit, j'aimerais apporter ma contribution.
Table des matières
- Table des matières
- 1. Gestionnaire de paquets
- NPM
- Bower
- Différence entre
Bower
y NPM
- Fils
- jspm
- 2. Chargeur de modules / Regroupement
- RequireJS
- Browserify
- Webpack
- SystemJS
- 3. Coureur de tâches
- 4. Outils d'échafaudage
1. Gestionnaire de paquets
Les gestionnaires de paquets simplifient l'installation et la mise à jour des dépendances du projet, qui sont des bibliothèques telles que : jQuery, Bootstrap
etc. - tout ce qui est utilisé sur votre site et qui n'est pas écrit par vous.
Parcourir tous les sites web des bibliothèques, télécharger et décompacter les archives, copier les fichiers dans les projets - tout cela est remplacé par quelques commandes dans le terminal.
Il représente : Node JS package manager
vous aide à gérer toutes les bibliothèques sur lesquelles votre logiciel s'appuie. Vous définissez vos besoins dans un fichier appelé package.json
et exécuter npm install
dans la ligne de commande... puis BANG, vos paquets sont téléchargés et prêts à être utilisés. Il pourrait être utilisé à la fois pour front-end
y back-end
bibliothèques.
Pour la gestion frontale des paquets, le concept est le même avec NPM. Toutes vos bibliothèques sont stockées dans un fichier nommé bower.json
et ensuite exécuter bower install
dans la ligne de commande.
Bower est recommandé à son utilisateur pour migrer vers npm ou yarn . Veuillez faire attention
Différence entre Bower
y NPM
La plus grande différence entre Bower
y NPM
est que NPM fait de l'imbrication tandis que Bower exige un arbre de dépendance plat comme ci-dessous.
Citation de Quelle est la différence entre Bower et npm ?
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
Bower
project root
[bower_components] // default directory for dependencies
-> dependency A
-> dependency B // needs A
-> dependency C // needs B and D
-> dependency D
Il y a quelques mises à jour sur npm 3 Duplication and Deduplication
, veuillez ouvrir le document pour plus de détails.
Un nouveau gestionnaire de paquets pour JavaScript
publié sur par Facebook
récemment avec quelques avantages supplémentaires par rapport à NPM
. Et avec le fil, vous pouvez toujours utiliser les deux NPM
y Bower
pour récupérer le paquet. Si vous avez déjà installé un paquet auparavant, yarn
crée une copie en cache qui facilite offline package installs
.
JSPM est un gestionnaire de paquets pour le SystemJS
chargeur de modules universel, construit sur la base de l'architecture dynamique de l'entreprise. ES6
chargeur de module. Il ne s'agit pas d'un gestionnaire de paquets entièrement nouveau avec son propre ensemble de règles, mais il fonctionne au-dessus des sources de paquets existantes. En l'état, il fonctionne avec GitHub
y npm
. Comme la plupart des Bower
sont basés sur GitHub
nous pouvons installer ces paquets en utilisant jspm
également. Il dispose d'un registre qui répertorie la plupart des paquets frontaux couramment utilisés pour faciliter l'installation.
Voir la différence entre Bower
y jspm
: Gestionnaire de paquets : Bower et jspm
2. Chargeur de modules / Regroupement
Le code de la plupart des projets, quelle que soit leur ampleur, est réparti entre plusieurs fichiers. Vous pouvez simplement inclure chaque fichier dans un fichier individuel <script>
cependant, <script>
établit une nouvelle connexion HTTP, et pour les petits fichiers - ce qui est un objectif de la modularité - le temps d'établissement de la connexion peut prendre beaucoup plus de temps que le transfert des données. Pendant que les scripts se téléchargent, aucun contenu ne peut être modifié sur la page.
- Le problème du temps de téléchargement peut être largement résolu en concaténant un groupe de modules simples en un seul fichier et en le réduisant.
Par exemple
<head>
<title>Wagon</title>
<script src=“build/wagon-bundle.js”></script>
</head>
- Les performances se font toutefois au détriment de la flexibilité. Si vos modules sont interdépendants, ce manque de flexibilité peut être rédhibitoire.
Par exemple
<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>
Les ordinateurs peuvent le faire mieux que vous, et c'est pourquoi vous devriez utiliser un outil pour regrouper automatiquement tout dans un seul fichier.
Puis nous avons entendu parler de RequireJS
, Browserify
, Webpack
y SystemJS
Il s'agit d'un JavaScript
et le chargeur de modules. Il est optimisé pour une utilisation dans le navigateur, mais il peut être utilisé dans d'autres environnements JavaScript, tels que Node
.
Par exemple monModule.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,
};
});
Sur main.js
nous pouvons importer myModule.js
comme une dépendance et l'utiliser.
require(["package/myModule"], function(myModule) {
myModule.foobar();
});
Et puis dans notre HTML
on peut se référer à l'utilisation avec RequireJS
.
<script src=“app/require.js” data-main=“main.js” ></script>
Plus d'informations sur CommonJS
y AMD
pour comprendre facilement. Relation entre CommonJS, AMD et RequireJS ?
Établi pour permettre l'utilisation de CommonJS
modules formatés dans le navigateur. Par conséquent, Browserify
n'est pas tant un chargeur de modules qu'un regroupeur de modules : Browserify
est entièrement un outil de construction, produisant un paquet de code qui peut ensuite être chargé côté client.
Commencez par une machine de construction sur laquelle node et npm sont installés, et récupérez le paquet :
npm install -g –save-dev browserify
Écrivez vos modules en CommonJS
format
//entry-point.js
var foo = require("../foo.js");
console.log(foo(4));
Et quand vous êtes satisfaits, donnez la commande au paquet :
browserify entry-point.js -o bundle-name.js
Browserify trouve récursivement toutes les dépendances du point d'entrée et les assemble en un seul fichier :
<script src="”bundle-name.js”"></script>
Il regroupe tous vos actifs statiques, notamment JavaScript
les images, les feuilles de style en cascade (CSS), etc., en un seul fichier. Il vous permet également de traiter les fichiers à l'aide de différents types de chargeurs. Vous pouvez écrire votre JavaScript
con CommonJS
o AMD
la syntaxe des modules. Il s'attaque au problème de la construction d'une manière fondamentalement plus intégrée et opinionnée. Dans Browserify
vous utilisez Gulp/Grunt
et une longue liste de transformations et de plugins pour faire le travail. Webpack
offre suffisamment de puissance pour que vous n'ayez pas besoin d'un système d'alarme. Grunt
o Gulp
du tout.
L'utilisation de base est plus que simple. Installez Webpack comme Browserify :
npm install -g –save-dev webpack
Et passer à la commande un point d'entrée et un fichier de sortie :
webpack ./entry-point.js bundle-name.js
Il s'agit d'un chargeur de modules qui peut importer des modules au moment de l'exécution dans n'importe lequel des formats populaires utilisé aujourd'hui ( CommonJS, UMD, AMD, ES6
). Il est construit au-dessus de la ES6
et est suffisamment intelligent pour détecter le format utilisé et le gérer de manière appropriée. SystemJS
peut également transpiler du code ES6 (avec Babel
o Traceur
) ou d'autres langues telles que TypeScript
y CoffeeScript
en utilisant des plugins.
Vous voulez savoir ce qu'est le node module
et pourquoi il n'est pas bien adapté à l'in-browser.
Article plus utile :
Pourquoi jspm
y SystemJS
?
L'un des principaux objectifs de ES6
la modularité consiste à rendre les choses très simples d'installer et d'utiliser n'importe quelle bibliothèque Javascript de n'importe où sur Internet ( Github
, npm
etc.). Deux choses seulement sont nécessaires :
- Une seule commande pour installer la bibliothèque
- Une seule ligne de code pour importer la bibliothèque et l'utiliser
Ainsi, avec jspm
vous pouvez le faire.
- Installer la bibliothèque avec une commande :
jspm install jquery
- Importez la bibliothèque avec une seule ligne de code, sans avoir besoin de référence externe dans votre fichier HTML.
display.js
var $ = require('jquery');
$('body').append("I've imported jQuery!");
-
Ensuite, vous configurez ces choses dans System.config({ ... })
avant d'importer votre module. Normalement, lorsque vous exécutez jspm init
il y aura un fichier nommé config.js
à cette fin.
-
Pour faire fonctionner ces scripts, nous devons charger system.js
y config.js
sur la page HTML. Après cela, nous allons charger le fichier display.js
en utilisant le site SystemJS
chargeur de module.
index.html
<script src="jspm_packages/system.js"></script>
<script src="config.js"></script>
<script>
System.import("scripts/display.js");
</script>
Noté : Vous pouvez également utiliser npm
con Webpack
comme Angular 2 l'a appliqué. Depuis jspm
a été développé pour s'intégrer à SystemJS
et il fonctionne en plus du système existant npm
source, donc votre réponse ne dépend que de vous.
3. Coureur de tâches
Les exécuteurs de tâches et les outils de construction sont principalement des outils en ligne de commande. Pourquoi devons-nous les utiliser ? En un mot : automatisation . Moins vous aurez à travailler lors de l'exécution de tâches répétitives telles que minification, compilation, tests unitaires, linting ce qui nous coûtait auparavant beaucoup de temps à faire en ligne de commande ou même manuellement.
Vous pouvez créer une automatisation pour votre environnement de développement pour pré-traiter les codes ou créer des scripts de construction avec un fichier de configuration et il semble très difficile de gérer une tâche complexe. Populaire ces dernières années.
Chaque tâche dans Grunt
est un tableau de différentes configurations de plugins, qui sont simplement exécutées les unes après les autres, de manière strictement indépendante et séquentielle.
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']);
L'automatisation tout comme Grunt
mais au lieu de configurations, vous pouvez écrire JavaScript
avec des flux comme si c'était une application de nœud. Je préfère ces jours-ci.
Il s'agit d'un Gulp
exemple de déclaration de tâche.
//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);
});
Voir plus : https://preslav.me/2015/01/06/gulp-vs-grunt-why-one-why-the-other/
4. Outils d'échafaudage
Slush et Yeoman
Vous pouvez créer des projets de démarrage avec eux. Par exemple, si vous envisagez de construire un prototype avec HTML et SCSS, au lieu de créer manuellement des dossiers tels que scss, css, img, fonts, etc. Vous pouvez simplement installer yeoman
et lancer un simple script. Ensuite, tout est là pour vous.
Trouver plus aquí .
npm install -g yo
npm install --global generator-h5bp
yo h5bp
Voir plus : https://www.quora.com/What-are-the-differences-between-NPM-Bower-Grunt-Gulp-Webpack-Browserify-Slush-Yeoman-and-Express
Ma réponse ne correspond pas au contenu de la question, mais lorsque je recherche ces connaissances sur Google, je vois toujours la question en haut de la page. J'ai donc décidé d'y répondre en résumé. J'espère que vous l'avez trouvé utile.
Si vous aimez cet article, vous pouvez en lire davantage sur mon blog à l'adresse suivante trungk18.com . Merci de votre visite :)
59 votes
Il est temps d'ajouter enroulement ?
186 votes
C'est une question très raisonnable. les pseudo-développeurs web comme moi trébuchent sur tous les paquets qui sont implémentés de façon hebdomadaire
158 votes
hackernoon.com/
47 votes
@Fisherman Je suis totalement nouveau dans ce domaine, et cela semble complètement fou...
0 votes
@DavidStosik peut-être avez-vous manqué les parties encourageantes dans les sections de commentaires :)
15 votes
@Fisherman Le commentaire "recommandé" que je viens de lire était encore pire ! D : Je veux juste construire une page statique qui utilise quelques librairies CSS/JS, et je bénéficierais d'un outil qui peut compiler tout ça ensemble... Ajoutez-y un moteur de templating pour donner un peu de repos à mes doigts Ctrl-C/Ctrl-V, et ce serait parfait... Et pourtant, après des heures de travail, j'essaie toujours de trouver un moyen d'y arriver...
3 votes
@DavidStosik : C'est un investissement unique. Après une configuration parfaite, vous êtes prêt à voler.
0 votes
@gman, jspm qui utilise aussi le rollup.
2 votes
Je suis développeur web depuis plus de 16 ans et j'ai passé une grande partie de ma carrière sous l'égide de Microsoft .NET, qui nous a protégés pendant de nombreuses années d'outils comme ceux-là avant de nous faire vivre l'enfer en étant soudainement "cool" avec tout cela à la fois (même si leur IDE ne pouvait pas le gérer [j'ai entendu dire que vs2017 est meilleur, mais je vais rester avec WebStorm maintenant {Digresption}]). Quoi qu'il en soit, ces choses compliquent l'infrastructure de développement et nécessitent beaucoup plus de temps de configuration initiale pour que tout soit parfait, mais une fois que c'est en place et que ça fonctionne, c'est génial !
0 votes
Il est temps d'ajouter du fil ( yarnpkg.com ) ?
2 votes
@Fisherman semble quelque peu naïf d'imaginer qu'il s'agira vraiment d'un "investissement unique"... après quelques années de travail avec la technologie, la motivation pour apprendre ces couches de complications superflues est, pour moi, fortement diminuée par l'expérience amère de choses qui semblaient bien fonctionner et qui ont été rendues obsolètes. Les technologies web à la mode comme celle-ci ont une mauvaise odeur de ce point de vue (et je ne suis même pas vieux).
2 votes
Je pense que vous devriez également ajouter le Babel dans la liste.
0 votes
Npm ne sait rien du tout de webpack/gulp/grunt. Il sait juste comment installer vos dépendances, exécuter votre application et vos tests. Vous pourriez ajouter des fonctionnalités supplémentaires en ajoutant des scripts personnalisés, cependant.
1 votes
Bienvenue dans le terrier du lapin.
0 votes
Il y a 6 questions directement posées et une dizaine d'autres indirectement posées comme "est-ce correct ?".