Dans un article précédent nous avons rencontré Hyperapp, une petite bibliothèque qui peut être utilisée pour créer des applications Web dynamiques à une seule page, de la même manière que React ou Vue
. Je vais changer les choses d'un cran. Nous allons créer l'application localement (nous travaillions auparavant sur CodePen), apprendre à la regrouper en utilisant Parcel (un bundler de modules similaire à webpack ou Rollup) et le déployer sur le web en utilisant Pages GitHub .
Ne vous inquiétez pas si vous n'avez pas terminé le projet à partir du premier message. Tout le code est fourni ici (bien que je ne vais pas entrer dans le détail expliquant ce qu'il fait) et les principes décrits peuvent être appliqués à la plupart des autres projets JavaScript.
Si vous voulez voir ce que nous allons finir avec, vous pouvez voir le projet fini ici ou télécharger le code de notre repo GitHub .
Configuration de base
Pour suivre, vous devez avoir les deux Node.js et npm installés (ils sont livrés ensemble). Je vous recommande d'utiliser un gestionnaire de versions tel que nvm pour gérer votre installation de nœud ( voici comment ), et si vous souhaitez obtenir de l'aide pour vous familiariser avec npm, consultez notre tutoriel npm pour les débutants .
Nous allons utiliser les commandes du terminal pour créer des fichiers et des dossiers, mais n'hésitez pas à le faire en pointant et en cliquant dessus si c'est votre truc.
Pour commencer, créez un nouveau dossier appelé hyperliste
:
mkdir hyperliste
Passez maintenant à ce répertoire et initialisez un nouveau projet en utilisant npm:
cd hyperlien /
npm init
Cela vous demandera de répondre à quelques questions sur l'application. Il suffit d'appuyer sur pour entrer pour accepter la valeur par défaut, mais n'hésitez pas à ajouter votre nom en tant qu'auteur et à ajouter une description de l'application.
Cela devrait créer un fichier appelé package.json
dans le répertoire hyperliste
qui ressemble à ceci:
{
"nom": "hyperliste",
"version": "1.0.0",
"description": "Une liste de choses à faire avec Hyperapp",
"main": "http://www.sitepoint.com/index.js",
"scripts": {
"test": "echo " Erreur: aucun test spécifié "&& exit 1"
},
"auteur": "DAZ",
"licence": "MIT"
}
Maintenant, nous devons installer la bibliothèque Hyperapp. Ceci est fait en utilisant npm avec le drapeau - save
ce qui signifie que le fichier package.json
sera mis à jour pour l'inclure en tant que dépendance:
npm install - enregistrer hyperapp
Cela pourrait donner des avertissements sur le fait de ne pas avoir de champ de dépôt. Ne vous inquiétez pas à ce sujet, car nous allons le réparer plus tard. Il doit mettre à jour le fichier package.json
pour inclure l'entrée suivante (il peut y avoir une légère différence dans le numéro de version):
"dependencies": {
"hyperapp": "^ 1.2.5"
}
Il créera également un répertoire appelé node_modules
où sont stockés tous les fichiers Hyperapp, ainsi qu'un fichier appelé package-lock.json
. Ceci est utilisé pour garder une trace de l'arbre de dépendances pour tous les paquets qui ont été installés en utilisant npm.
Maintenant nous sommes prêts à commencer à créer l'application!
Structure des dossiers
C'est une convention commune de mettre tout de votre code source dans un dossier appelé src
. Dans ce dossier, nous allons mettre tous nos fichiers JavaScript dans un répertoire appelé js
. Créons les deux maintenant:
mkdir -p src / js
Dans le post précédent nous avons appris que les applications sont construites dans Hyperapp en utilisant trois parties principales: l'état, les actions et la vue. Dans l'intérêt de l'organisation de code, nous allons placer le code de chaque partie dans un fichier séparé, nous devons donc créer ces fichiers dans le répertoire js
:
cd src / js
appuyez sur state.js actions.js view.js
Ne vous inquiétez pas, ils sont tous vides. Nous allons ajouter le code bientôt!
Enfin, nous retournerons dans le répertoire src
et créerons nos fichiers "point d'entrée". Ce sont les fichiers qui seront liés à tous les autres. Le premier est index.html
qui contiendra du HTML de base, et l'autre est index.js
qui liera à tous nos autres fichiers JavaScript et à nos fichiers SCSS: [19659009] cd ..
touchez index.html index.js
Maintenant que notre structure de dossiers est en place, nous pouvons commencer à ajouter du code et à câbler tous les fichiers ensemble.
Un peu de HTML de base
Nous allons commencer par ajouter du code HTML de base au fichier Il est maintenant temps d'ajouter du code JavaScript Les modules JavaScript natifs ont été introduits dans ES6 (alias ES2015). Malheureusement, les navigateurs ont été lents à adopter nativement l'utilisation des modules ES6, bien que commencent maintenant à s'améliorer . Heureusement, nous pouvons toujours les utiliser pour organiser notre code, et Parcel va trier les assembler tous ensemble. Commençons par ajouter le code de l'état initial dans le fichier C'est la même chose que l'objet que nous avons utilisé dans l'article précédent mais avec la déclaration Ensuite, nous ajouterons les actions à Encore une fois, c'est la même chose que l'objet que nous avons utilisé dans l'article précédent, avec l'ajout de la déclaration d'exportation Enfin, nous allons ajouter le code de vue à Tout d'abord, ce fichier utilise la déclaration Ce fichier contient deux composants: Notez que seule la fonction Maintenant nous avons ajouté tout notre code JavaScript, nous avons juste besoin de tout assembler dans l'index Cela importe la fonction La dernière ligne de code appelle la fonction Avant de continuer à construire notre application, nous devrions donnez-lui du style. Allons dans le répertoire Nous allons maintenant créer les deux fichiers qui contiendront le code SCSS que nous avons utilisé dans la partie 1: Nous utilisons un fichier appelé Le CSS spécifique à l'application va dans Si votre SCSS commence à devenir plus compliqué, vous pouvez le décomposer en fichiers séparés et ensuite les importer tous dans Maintenant, nous devons lier ces fichiers à notre application. Nous ne plaçons pas le lien dans notre fichier HTML, comme vous le faites habituellement avec CSS. Au lieu de cela, nous le plaçons dans le fichier Pour importer les fichiers SCSS, il suffit de mettre à jour notre fichier Maintenant que tout notre code est terminé, il est temps de commencer à travailler sur le processus de construction! Babel transporte le code JavaScript moderne en un code que la plupart des navigateurs peuvent utiliser. Il faudra aussi réécrire le code JSX en JavaScript pur. Pour pouvoir utiliser Babel avec les transformations JSX, nous devons l'installer avec le plugin JSX: Nous devons également créer un fichier Notez qu'il s'agit d'un fichier caché vous ne pourrez peut-être pas le voir après sa création! Malheureusement, notre code ne fonctionnera pas dans tous les navigateurs tel qu'il est. Nous devons utiliser un processus de construction pour transmettre notre code ES6 + à ES5 et fusionner tous nos fichiers JS en un seul fichier. Utilisons Colis pour faire cela. Colis est un bundler de modules, similaire à webpack ou Rollup, qui promet une configuration zéro et est incroyablement rapide. Il nous permet d'écrire du JavaScript moderne dans des fichiers séparés, puis de les regrouper en un seul fichier JavaScript minifié que la plupart des navigateurs pourront utiliser. Il prend également en charge plusieurs fichiers CSS, SCSS et PostCSS prêts à l'emploi. Tout d'abord, installons Parcel: Parcel est livré avec son propre serveur intégré. Cela signifie que vous pouvez continuer à développer et apporter des modifications à l'application et Colis le construira en arrière-plan, de sorte que toutes les modifications soient affichées instantanément! Pour démarrer le serveur, entrez la commande suivante: Ceci spécifie que le point d'entrée est le fichier spécifie qu'un dossier appelé Vous devriez également voir un message indiquant que l'application est en cours de construction dans la fenêtre du terminal. Vous pourriez même remarquer que Colis installe le module npm Après quelques secondes, vous devriez voir un message semblable au suivant: Le serveur est en cours d'exécution. Si vous ouvrez votre navigateur et accédez à http: // localhost: 1234 vous pourrez voir l'application s'exécuter. Cela se mettra à jour à la volée, de sorte que toutes les modifications que vous apportez dans votre code seront immédiatement répercutées sur la page (ou après une courte pause pour reconstruire le code). Il charge aussi les modules, donc il installe automatiquement tous les modules npm nécessaires, comme avec "node-sass". Génial! Une fois que vous êtes satisfait de l'apparence du site, il est temps de construire le site statique. Tout d'abord, arrêtez le serveur en maintenant enfoncées Ctrl et c ensemble. Exécutez ensuite la commande suivante dans le terminal: Cela va générer les fichiers statiques et les placer dans le dossier Si vous prenez un pic dans le dossier npm possède une fonctionnalité utile appelée scripts qui vous permet d'exécuter des morceaux de code spécifiques avec une seule commande. Nous pouvons l'utiliser pour créer un couple de scripts qui accélèreront l'utilisation de Parcel Ajoutez ce qui suit à la section "scripts" du fichier Maintenant nous pouvons simplement lancer les commandes suivantes pour démarrer le serveur: Et la commande suivante lancera le processus de construction: Si vous n'avez jamais utilisé de scripts npm, ou si vous souhaitez un rafraîchissement, vous pouvez consulter notre tutoriel pour débutants sur le sujet . GitHub est un excellent endroit pour héberger votre code, et il a également une grande fonctionnalité appelée GitHub Pages qui vous permet d'héberger des sites statiques sur GitHub. Pour commencer, vous devez vous assurer que vous avez un compte GitHub et que vous avez git installé sur votre machine locale. Pour vous assurer que nous ne commettons pas de fichiers inutiles, ajoutons un Comme son nom l'indique, ce fichier indique à git quels fichiers (ou patterns) il devrait ignorer. Il est généralement utilisé pour éviter de valider des fichiers qui ne sont pas utiles aux autres collaborateurs (comme les fichiers temporaires créés par les IDE, etc.). Je vous recommande d'ajouter les éléments suivants pour vous assurer qu'ils ne sont pas suivis par git ( rappelez-vous que Nous sommes maintenant prêts à initialiser git dans le répertoire Ensuite, nous ajoutons tous les fichiers que nous avons créés jusqu'à présent: Puis nous validons ces fichiers au contrôle de version: Maintenant que nos fichiers importants sont suivis par git, nous devons créer un dépôt distant sur GitHub. Connectez-vous simplement à votre compte et cliquez sur le bouton Nouveau référentiel et suivez les instructions. Si vous êtes bloqué, vous pouvez consulter la documentation de GitHub ici: Créer un Repo . Après avoir fait cela, vous devrez ajouter l'URL de votre dépôt GitHub distant sur votre machine locale: Veillez à remplacer et par les valeurs correctes. Si vous voulez vérifier que vous avez tout fait correctement, vous pouvez utiliser Et enfin, nous devons pousser notre code vers GitHub: Cela va pousser tout votre code dans votre dépôt GitHub, y compris les fichiers statiques dans le répertoire Cela devrait signifier que vous pouvez maintenant accéder à l'application à l'adresse suivante: https://nomutilisateur.github.io/repo-name. Par exemple, vous pouvez voir la nôtre at sitepoint-editors.github.io/hyperlist/ . Dorénavant, si vous apportez des modifications à votre application, vous pouvez suivre le workflow suivant: Nous pouvons accélérer ce processus en créant un script npm pour prendre soin des trois dernières étapes en une fois. Ajoutez l'élément suivant à l'entrée "scripts" dans Maintenant, tout ce que vous devez faire si vous voulez déployer votre code après avoir apporté des modifications est d'exécuter la commande suivante: Et cela nous amène à la fin de ce tutoriel. J'ai utilisé l'application que nous avons créée dans la partie 1 de ce tutoriel, mais les principes restent les mêmes pour la plupart des projets JavaScript. J'espère avoir démontré à quel point il est facile d'utiliser Parcel pour créer un site JS statique et le déployer automatiquement sur les pages GitHub avec une seule commande! index.html
. Hyperapp prend soin de créer le HTML et peut le rendre directement dans la balise . Cela signifie que nous n'avons qu'à configurer les méta-informations contenues dans la balise
. À l'exception de la valeur de la balise
vous pouvez utiliser le même fichier index.html
pour chaque projet. Ouvrez index.html
dans votre éditeur de texte favori et ajoutez le code suivant:
Modules ES6
state.js
: ] const state = {
articles: [],
contribution: '',
espace réservé: 'Faire une liste ..'
}
état par défaut d'exportation;
d'exportation
à la fin. Cela rendra l'objet disponible pour tout autre fichier qui l'importe. En en faisant l'exportation par défaut, nous n'avons pas à le nommer explicitement quand nous l'importons plus tard. actions.js
: const actions = {
ajouter: () => état => ({
contribution: '',
éléments: state.items.concat ({
valeur: state.input,
complété: faux,
id: Date.now ()
})
}),
entrée: ({valeur}) => ({entrée: valeur}),
bascule: id => état => ({
éléments: state.items.map (item => (
id === item.id? Object.assign ({}, item, {completed:! Item.completed}): item
))
}),
destroy: id => état => ({
éléments: state.items.filter (item => item.id! == id)
}),
clearAllCompleted: ({items}) => ({
items: items.filter (item =>! item.completed)
})
}
exporter les actions par défaut;
à la fin. view.js
: import {h} à partir de 'hyperapp'
const AddItem = ({ajouter, entrée, valeur, espace réservé}) => (
Hyper Liste
{state.items.map (item => (
))}
import
pour importer le module h
de la bibliothèque Hyperapp que nous avons installée en utilisant npm plus tôt. C'est la fonction que Hyperapp utilise pour créer les nœuds DOM virtuels qui composent la vue. AddItem
et ListItem
. Ce ne sont que des fonctions qui renvoient du code JSX et sont utilisées pour abstraire différentes parties de la vue dans des blocs de construction distincts. Si vous constatez que vous utilisez un grand nombre de composants, il peut être utile de les déplacer dans un fichier components.js
distinct, puis de les importer dans le fichier view.js
. view
est exportée à la fin du fichier. Cela signifie que seule cette fonction peut être importée par d'autres fichiers, plutôt que par les composants séparés. . ] fichier. Ceci est fait en utilisant la directive
import
. Ajoutez le code suivant à index.js
: import {app} à partir de 'hyperapp'
importer l'état à partir de './js/state.js'
importer des actions à partir de './js/actions.js'
importer la vue à partir de './js/view.js'
const main = app (état, actions, vue, document.body);
app
de la bibliothèque Hyperapp, puis importe les trois fichiers JavaScript que nous venons de créer. L'objet ou la fonction qui a été exporté de chacun de ces fichiers est affecté aux variables état
actions
et vue
respectivement, de sorte qu'ils peuvent être référencés dans ce fichier app
qui démarre l'application en cours d'exécution. Il utilise chacune des variables créées à partir de nos fichiers importés comme les trois premiers arguments. Le dernier argument est l'élément HTML où l'application sera rendue - ce qui, par convention, est document.body
. Ajouter un style
src
et créons un dossier pour notre SCSS: mkdir src / scss
cd src / scss
touchez index.scss _settings.scss
_settings.scss
pour stocker toutes les variables Sass pour les différentes polices et couleurs que notre application utilisera. Cela les rend plus faciles à trouver si vous décidez de mettre à jour l'une de ces valeurs à l'avenir. Ouvrez le fichier _settings.scss
et ajoutez le code suivant: // polices
@import url ("https://fonts.googleapis.com/css?family=Racing+Sans+One");
$ base-fonts: Helvetica Neue, sans-serif;
$ heading-font: Racing Sans One, sans-serif;
// couleurs
$ primary-color: # 00caff;
$ secondary-color: hotpink;
$ bg-color: # 222;
index.scss
mais nous devons nous assurer que nous importons le fichier _settings.scss
au début, car les variables qu'il contient sont référencées plus tard dans le fichier. Ouvrez index.scss
et ajoutez le code suivant: @import 'settings';
* {
marge: 0;
rembourrage: 0;
taille de boîte: border-box;
}
corps {
rembourrage-dessus: 50px;
arrière-plan: $ bg-color;
couleur: $ primary-color;
affichage: flex;
hauteur: 100vh;
justify-content: centre;
font-family: $ base-polices;
}
h1 {
couleur: $ secondary-color;
& strong {color: $ couleur primaire; }
font-family: $ heading-font;
font-weight: 100;
taille de police: 4.2em;
text-align: centre;
}
a {color: $ primaire-couleur; }
.fléchir{
affichage: flex;
align-items: top;
marge: 20px 0;
contribution {
bordure: 1px solide $ couleur primaire;
background-color: $ couleur primaire;
taille de police: 1.5em;
font-weight: 200;
largeur: 50vw;
hauteur: 62px;
rembourrage: 15px 20px;
marge: 0;
contour: 0;
& :: - webkit-input-placeholder {couleur: $ bg-color; }
& :: - moz-placeholder {couleur: $ bg-color; }
& :: - ms-input-placeholder {couleur: $ bg-color; }
&: hover, &: focus, &: actif {background: $ primary-color; }
}
bouton {
hauteur: 62px;
taille de police: 1.8em;
rembourrage: 5px 15px;
marge: 0 3px;
}
}
ul # liste {
affichage: flex;
flex-direction: colonne;
rembourrage: 0;
marge: 1.2em;
largeur: 50vw;
li {
taille de police: 1.8em;
alignement vertical: bas;
&.terminé{
couleur: $ secondary-color;
text-decoration: interligne;
bouton{
couleur: $ primary-color;
}
}
bouton {
arrière-plan: aucun;
border: aucun;
couleur: $ secondary-color;
contour: aucun;
taille de police: 0.8em;
font-weight: 50;
rembourrage-dessus: 0.3em;
marge gauche: 5px;
}
}
}
bouton {
arrière-plan: $ bg-color;
border-radius: 0px;
bordure: 1px solide $ couleur primaire;
couleur: $ primary-color;
font-weight: 100;
contour: aucun;
rembourrage: 5px;
marge: 0;
&: hover, &: désactivé {
arrière-plan: $ primary-color;
couleur: # 111;
}
&: active {outline: 2px solide $ couleur primaire; }
&: focus {border: 1px solide $ couleur primaire; }
}
index.scss
. index.js
. C'est parce que nous utilisons SCSS et qu'il doit être pré-traité en CSS. Parcel fera cela pour nous et triera aussi le lien entre le fichier HTML et le fichier CSS standard qu'il crée index.js
pour inclure la ligne suivante: import './scss/index.scss'
Babel
npm install --save babel- plugin-transformer-réagir-jsx babel-preset-env
.babel.rc
qui est utilisé pour indiquer à Babel d'utiliser la fonction h
d'Hyperapp lors du traitement de JSX. Le code suivant va créer le fichier avec les informations pertinentes: echo '{"plugins": [["transform-react-jsx", { "pragma": "h" }]]}'> .babelrc
Colis
npm install --save parcel-bundler
./ node_modules /.bin/parcel src / index.html --out-dir docs
index.html
. C'est tout ce que Parcel doit savoir, car il suivra le lien vers index.js
qui se trouve dans ce fichier, puis suivra les directives import
dans ce fichier. docs
doit être utilisé pour afficher tous les fichiers statiques. Par défaut, cela s'appelle habituellement dist
- mais, comme vous le verrez plus tard, nous avons besoin qu'il soit appelé docs
pour que nous puissions l'intégrer aux pages GitHub. node-sass
pour vous car il remarque automatiquement que nous avons utilisé des fichiers SCSS, mais aussi que nous n'avons pas node-sass
installée. Comment cool? Serveur fonctionnant à http: // localhost: 1234
✨ Construit en 3.15s.
./ node_modules / .bin / parcel build src / index.html --out-dir docs --public-url ./
docs
. docs
vous devriez trouver un fichier appelé ] index.html
. Ouvrez-le dans votre navigateur et vous devriez voir le site en cours d'exécution, en utilisant uniquement les fichiers statiques dans le dossier docs
. Parcel a regroupé tout le code pertinent et a utilisé Babel pour transposer notre JavaScript moderne en un seul fichier JavaScript et a utilisé node-sass pour pré-traiter nos fichiers SCSS dans un seul fichier CSS. Ouvrez-les et vous pouvez voir que le code a également été minimisé! npm Scripts
package.json
: "start" : "parcel src / index.html --out-dir docs",
"build": "parcel build src / index.html --out-dir docs --public-url ./"
npm start
npm run build
Déploiement sur des pages GitHub
Fichier gitignore
vers le répertoire hyperliste
: appuyez sur .gitignore
gitignore
est un fichier caché!): # Logs
journaux
*.bûche
npm-debug.log *
# Données d'exécution
pids
* .pid
*.la graine
# Répertoire de dépendances
node_modules
# Répertoire de cache npm facultatif
.npm
# Historique REPL optionnel
.node_repl_history
# Cache pour Parcel
.cache
# Des trucs de pomme
.DS_Store
hyperliste
: git init
git add.
git commit -m 'Initial Commit'
git distant ajouter l'origine https://github.com//.git
git remote -v
. git push maître d'origine
docs
. Les pages GitHub peuvent maintenant être configurées pour utiliser les fichiers de ce répertoire. Pour ce faire, connectez-vous au dépôt sur GitHub et allez à la section Settings du dépôt et descendez jusqu'à la section GitHub Pages . Ensuite, sous Source sélectionnez l'option "master branch / docs folder", comme on peut le voir dans la capture d'écran ci-dessous: Workflow
npm start
npm run build
git add.
git commit -m 'dernière mise à jour '
git push master d'origine
. package.json
: "deploy": "npm run build && git add. && git commit -a -m 'dernière génération' && git push origine maîtriser"
npm run deploy
C'est tout, les gars!
Source link