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.

Deux modes de fonctionnement sont implémentés:

  1. Le programme compare la date du fichier local avec celle du fichier sur le serveur. Si le fichier local est plus récent, il est mis à jour.
  2. Le programme compare le fichier local avec un double, local aussi, dans un répertoire spécial. Si la taille diffère ou si la comparaison du contenu montre une différence, le fichier est mis à jour sur le site.

Dans tous les cas le fichier est envoyé s'il n'existe pas sur le site ou dans le dossier des doubles.

La seconde solution est plus rapide et plus sûre, disposer d'une copie, que l'on peut placer sur une unité amovible réduit les risques.

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

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

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 -fftp.example.com -drepdistant 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).