thomaskekeisen.de

Aus dem Leben eines Bildschirmarbyters

Deployment direkt aus der IDE

Diese Webseite wird komplett statisch generiert. Um die ganzen notwendigen Prozesse, wie das Erzeugen der css -Dateien oder das Optimieren aller Bilder abzubilden, verwende ich gulp.js. Damit ich direkt aus meiner Entwicklungsumgebung PHPStorm auch das Veröffentlichen der Seite abwickeln kann, habe ich auch dafür einen passenden Automatismus.

Anfangs hatte ich das Script auf vinyl-ftp gesetzt um die Dateien auf den FTP-Server zu laden. Leider hat das Modul zumindest in meinem Fall einige Probleme mit der Handhabung von Bildern gemacht, sodass diese teilweise nach dem Upload nicht korrekt vom Server an den Client zurückgesendet werden konnten. Ein Umstieg auf ftp-deploy hat letztlich Abhilfe geschafft.

Das fertige Script lädt den gesamten dist -Ordner, der als localRoot im Einstellungen-Bereich definiert wird, in das Hauptverzeichnis ( / ) des Servers.

        lib/pad.js
        
            module.exports = function(num, size)
            {
                var s = '000000000' + num;

                return s.substr(s.length - size);
            };
        
    
        lib/ftpHelper.js
        
            var FtpDeploy = require('ftp-deploy');
            var plugins   = require('gulp-load-plugins')();
            var pad       = require('./pad');

            var ftpHelper = {
                ftpDeploy: null,
                plugins:   null,
                setup: function(plugins)
                       {
                           ftpDeploy         = new FtpDeploy();
                           ftpHelper.plugins = plugins;

                           var errorCallback = function (data) {
                               plugins.util.log('> ' + data.err);
                           };

                           var updateCallback = function(data) {
                               plugins.util.log('> ' + pad(data.percentComplete, 3) + '%', data.filename);
                           };

                           ftpDeploy.on('uploading',    updateCallback);
                           ftpDeploy.on('uploaded',     updateCallback);
                           ftpDeploy.on('upload-error', errorCallback);

                           return ftpDeploy;
                       },
                upload: function (config, done) {
                    try {

                        ftpDeploy.deploy(config, function(err) {
                            if (err) {
                                plugins.util.log(err);
                            }

                            done();
                        });
                    } catch (ex) {
                        plugins.util.log(ex);

                        done();
                    }
                }
            };

            module.exports = ftpHelper;
        
    
        
            var ftpHelper = require('./lib/ftpHelper');

            gulp.task('uploadToFTP', function(done)
            {
                ftpHelper.setup(plugins);

                ftpHelper.upload({
                    username:   'foo',
                    password:   'bar',
                    host:       'thomaskekeisen.de',
                    port:       21,
                    localRoot:  'dist',
                    remoteRoot: '/',
                    exclude:    ['.git', '.idea', 'tmp/*']
                }, done);
            });
        
    

Teilen

Kommentare