2013-02-21 13 views
5

Ich habe Yeoman 1.0 beta eingerichtet, um meine js/CSS-Aufgaben zu behandeln. Alles funktioniert gut, wenn ich grunt server starte, startet es einen statischen Server und verbindet eine Browsersitzung mit Port 9000 (Liveleload). js/css concat, minification arbeiten auch.Yeoman, Google App Engine Server zu verwenden

Nun ist es eine Möglichkeit, es auf eine Google App Engine-Entwicklungsserver verbinden machen kann (anstelle eines statischen Server starten). Der Server läuft auf Port 8080 auf localhost, und ich möchte grunt, um die Webseite nach css/js-Dateien unter Überwachung neu zu laden. Diese Dateien werden vom GAE-Server bereitgestellt.

Ich sehe einen Abschnitt rolling your own bei Grunzen-contrib-connectdocumentation, aber nicht sicher, ob es bedeutet, einen externen Server. Soweit ich sehen, dies sind die relavent Konfiguration von Gruntfile.js

connect: { 
     livereload: { 
     options: { 
      port: 8080, //*** was 9001 originally ** 
      middleware: function (connect) { 
      return [ 
       lrSnippet, 
       mountFolder(connect, '.tmp'), 
       mountFolder(connect, yeomanConfig.app) 
      ]; 
      } 
     } 
     }, 

Wenn ich die Portnummer 8080 zu ändern, und versuchen, starten offensichtlich es Fehler gibt.

Fatal error: Port 8080 is already in use by another process.

Also, ich möchte nicht einen neuen Server starten, sondern über GAE-Server bereits laufen.

Danke.

Antwort

7

Um GAE-Server anstelle von Nodejs Server zu verwenden, müssen wir Folgendes tun.
* Kompilieren Sie Ihr less/coffeescript, concat [, minify], kopieren Sie Ihren Code an den Ort, an dem sich der App-Engine-Code befindet.
* Erstellen Sie eine Aufgabe in grunt.js, um einen Shell-Befehl zum Ausführen der App-Engine zu erzeugen.

Dies ist das Beispiel, das ich als Referenz verwendet habe. https://github.com/cowboy/grunt/tree/master/tasks

Folgende grunt.js Datei kann helfen!

module.exports = function(grunt) { 
    grunt.initConfig({ 
    .... 
    }); 

    grunt.registerTask('appengine-update', 'Upload to App Engine.', function() { 
     var spawn = require('child_process').spawn; 
     var PIPE = {stdio: 'inherit'}; 
     var done = this.async(); 

     spawn('appcfg.py', ['update', 'build/task-manager-angular'], PIPE).on('exit', function(status) { 
      done(status === 0); 
     }); 
    }); 
    grunt.registerTask('clean', 'Clean the whole build directory.', function() { 
     require('child_process').exec('rm -rdf build', this.async()); 
    }); 

    grunt.registerTask('run', 'Run app server.', function() { 
     var spawn = require('child_process').spawn; 
     var PIPE = {stdio: 'inherit'}; 
     var done = this.async(); 
     spawn('dev_appserver.py', ['.'], PIPE).on('exit', function(status) { 
      done(status === 0); 
     }); 
    }); 
}); 

//.... 
//Other settings 
//.... 

grunt.loadTasks('tasks'); 
grunt.loadNpmTasks('grunt-coffeelint'); 
grunt.registerTask('build', 'coffee less concat'); 
grunt.registerTask('deploy', 'coffee less concat build appengine-update'); 
grunt.registerTask('default', 'coffee less'); 
};