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  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 
