JS FTP Synchronizer - Générateur de site statique JavaScript
Fonctionne sous Node.js, met en ligne une image locale d'un site web.
Une version PHP du même programme est aussi disponible: PHP FTP Synchronizer.
Le programme compare le fichier local avec un double, local aussi, dans un répertoire de backup. Si la taille diffère ou si la comparaison du contenu montre une différence, le fichier est mis à jour sur le site.
Le fichier est envoyé sur le site distant dans le dossier des doubles ou s'il est différent après quoi ce répertoire de backup devient une image exacte du répertoire distant..
La solution qui consiste à utiliser un répertoire clone est rapide et sûre, elle permet de disposer en outre d'une copie et on mettra de préférence ce dossier de backup sur une unité amovible.
Ce programme JavaScript utilise le framework asynchrone JSFtp pour envoyer les pages sur le site distant. Réaliser une succession d'opérations de ce genre en mode asynchrone est un vrai challenge. Notamment il est compliqué de créer des dossiers quand ils n'existent pas, puis d'y placer des fichiers, tout cela en ordre dispersé puisque le serveur effectue les opérations quand cela lui convient et non quand on le lui demande.
La solution la plus simple a été trouvée avec l'algorithme suivant:
function ftpSend(src, rmt, rdir) {
var connection = new JSFtp(OPTIONS)
connection.put(src, rmt, function(err) {
if (err) {
connection.raw.mkd(rdir, function(err, data) {
connection.put(src, rmt, function(err) {
if(err) {
return console.log("Error, file not uploaded.")
}
connection.raw.quit(function() {})
return
});
});
return
}
connection.raw.quit(function() {})
});
}
On envoie le fichier dans tous les cas, si une erreur se produit, on suppose que le dossier n'existe pas, donc on le crée. Puis on réitère l'envoie de fichier. Si l'erreur persiste, alors seulement on indique que le fichier ne peut être téléchargé.
En outre on utilise async/await pour obtenir une séquence quand c'est possible.
Mode d'emploi
La mise à jour du site se fait avec la commande suivante, qu'il est plus pratique de placer dans un fichier batch:
node sync.js [options/paramètres] répsource
La source est le répertoire local où se trouvent les fichiers à mettre en ligne. Les autres paramètres obligatoires sont les suivants.
- -furl: une URL au format ftp.
- -ddirectory: Le répertoire sur le site distant où seront stockés les fichiers.
- -bbackup: le chemin d'un répertoire de backup local qui sera une image du répertoire distant.
- -llogin: le nom de l'utilisateur ftp.
- -ppasse: le mot de passe de l'utilisateur ftp.
On peut ajouter les options suivantes.
- -q: (quiet) mode silencieux, seuls les messages d'erreurs sont affichés.
- -v: (verbose) affiche tous les détails des opérations.
- -t: (test) montre les opérations qui seront réalisées, donc les fichiers envoyés, sans les réaliser effectivement.
Exemple:
node sync.js -lmonlogin -pmonmotdepasse ftp.example.com -drepdistant -bbackuplocal replocal
Téléchargement et installation
Pour installer le programme:
- Extraire le contenu de l'archive.
- Télécharger et installer Node.js si besoin.
- Vous pouvez installer jsftp: npm install jsftp (il est déjà dans l'archive en fait).