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.

On peut ajouter les options suivantes.

Exemple:

node sync.js -lmonlogin -pmonmotdepasse ftp.example.com -drepdistant -bbackuplocal replocal

Téléchargement et installation

Pour installer le programme:

  1. Extraire le contenu de l'archive.
  2. Télécharger et installer Node.js si besoin.
  3. Vous pouvez installer jsftp: npm install jsftp (il est déjà dans l'archive en fait).