Automatisches Neuladen einer Sails.js-App bei Codeänderungen?


107

Derzeit scheint es, dass Sie für jede Codeänderung in einer Segel.js-App den Segelserver manuell stoppen und sails lifterneut ausführen müssen , bevor Sie die Änderungen sehen können.

Ich habe mich gefragt, ob es im Entwicklungsmodus eine Möglichkeit gibt, den Segelserver automatisch neu zu starten, wenn er eine Codeänderung feststellt.

Antworten:


74

Sie müssen einen Beobachter wie für immer , nodemon oder etwas anderes verwenden ...

Beispiel

  1. Installieren Sie für immer, indem Sie Folgendes ausführen :

    sudo npm install -g forever

  2. Starte es:

    forever -w start app.js


Um einen unendlichen Neustart zu vermeiden, da Sails in einen .tmpOrdner schreibt , können Sie eine .foreverignoreDatei in Ihrem Projektverzeichnis erstellen und diesen Inhalt darin ablegen:

**/.tmp/**
**/views/**
**/assets/**

Siehe das Problem auf GitHub: Für immer Neustart wegen /.tmp .


7
Möglicherweise möchten Sie auch Ansichten hinzufügen, .foreverignoreda keine Neustarts erforderlich sind, um Änderungen sofort anzuzeigen. zB**/views/**
Seth Malaki

Leider führt dies dazu, dass der Bootstrap-Code erneut ausgeführt wird und Sitzungen verloren gehen.
Rahulserver

1
Ich habe dies verwendet, erhalte jedoch die folgende Warnung: --minUptime nicht festgelegt. Standardmäßig: 1000ms. Wie setze ich diese Variable?
Golinmarq

47

Sie können sails-hook-autoreload verwenden

Heben Sie Ihre App einfach wie gewohnt an, und wenn Sie ein Modell oder eine Controller-Datei hinzufügen / ändern / entfernen, werden alle Controller und Modelle neu geladen, ohne dass die App abgesenkt / neu angehoben werden muss.


1
Dies scheint die einfachste / einfachste Lösung zu sein. Installieren Sie die npm und fügen Sie das Beispiel autoreload.js in den Konfigurationsordner ein, und Sie sind im Grunde fertig.
Braintapper

1
Einfach unglaublich. Am einfachsten und am meisten in Sails beheimatet.
Alexus

Im immer Details: Error: ER_ROW_IS_REFERENCED: Cannot delete or update a parent row: a foreign key constraint failgeworfen durch , 5/lib/node_modules/sails/lib/hooks/orm/index.js:221wenn ich sparen (mit Segel 11.3)
Gab

45

Zum Beispiel mit nodemon, um API- und Konfigurationsverzeichnisse zu beobachten

.nodemonignore Inhalt

views/*
.tmp/*
.git/*

Führen Sie den Befehl aus, nachdem Sie .nodemonignore erstellt haben

$> nodemon -w api -w config

Beispiel für den Supervisor, 3 Verzeichnisse zu ignorieren

$> supervisor -i .tmp,.git,views app.js

4
Ich mag die nodemonLösung gegenüber der foreverLösung, da die nodemonPipes ohne zusätzliche Konfiguration an stdout zurückgegeben werden. Erleichtert den Entwicklungsworkflow.
Aaron Ransley

Für den Befehl habe ich nur Ihr .nodemonignoreBeispiel verwendet und ausgeführt nodemon. Es funktioniert soweit.
Michael J. Calkins

Für alle anderen, die sich nicht sails liftsicher sind, wie die oben genannten Starts ausgeführt werden (entspricht) , kann nodemon sie verwenden app.js.
Tyler Collier


8

nodemonglobal oder lokal installieren .

npm install nodemon --save
npm install nodemon -g

Installieren Sie sailslokal in Ihrem Projekt wie folgt

npm install sails --save

dann ändern package.json

von

"scripts": {
  "debug": "node debug app.js",
  "start": "node app.js"
},

zu

"scripts": {
   "debug": "node debug app.js",
   "start": "node app.js",
   "dev": "export NODE_ENV=development && nodemon --ignore 'tmp/*' app.js && exit 0"
},

dann

npm run dev

7

Ich hatte das gleiche Problem und habe es mit grunt-watch und grunt-forever mit sails @ beta-Aufgaben gelöst. Das Ergebnis sind 4 Grunzbefehle:

UPDATE: Aufgaben sind in der aktuellen Segelversion verfügbar (es ist keine Beta mehr:>)

  • start Startet den Server
  • stop Stoppt den Server
  • Neustart Startet den Server neu
  • startWatch Startet den Server und wartet auf Änderungen, um ihn neu zu starten (mit grunt-watch). Dies ist wahrscheinlich Ihre Lösung, aber die anderen Befehle sind ebenfalls nützlich.

Hier ist der Code: Ich verwende sails @ beta, das ein Aufgabenverzeichnis enthält . Ich weiß nicht, ob dies in früheren Versionen enthalten ist:

  • Zunächst müssen Sie für immer in Ihrem Segelverzeichnis installieren:

    npm install grunt-forever --save-dev
  • task / config / forever.js Konfiguriere die Aufgabe für immer.

    module.exports = function(grunt) {
      grunt.config.set('forever', {
        server: {
           options: {
              index: 'app.js',
              logDir: 'logs'
           }
        }
      });
    
      grunt.loadNpmTasks('grunt-forever');
    };
  • task / config / watch.js ( bearbeiten ) Bearbeiten Sie die Überwachungsaufgabe , um eine neue Regel hinzuzufügen

    // api and assets default rules
    ,
    server: {
        // Server files to watch:
        files: [
            'api/**/*',
            'config/**/*'
        ],
    
        // Restart server
        tasks: ['forever:server:restart']
    }
  • task / register / watchForever.js Registrieren Sie Ihre benutzerdefinierten Aufgaben (diese Datei kann nach Belieben umbenannt werden).

    module.exports = function(grunt) {
    // Starts server
      grunt.registerTask('start', [
        'compileAssets',
        'linkAssetsBuild',
        'clean:build',
        'copy:build',
        'forever:server:start'
      ]);
    
      // Restarts the server (if necessary) and waits for changes
      grunt.registerTask('startWatch', [
        'restart',
        'watch:server'
      ]);
    
      // Restarts server
      grunt.registerTask('restart', [
        'forever:server:restart'
      ]);
    
      // Stops server
      grunt.registerTask('stop', [
        'forever:server:stop'
     ]);
    };

Damit sollten Sie in der Lage sein zu verwenden

    grunt startWatch

und lassen Sie Ihren Server warten, bis die Änderungen neu gestartet werden:>

Hoffe das hat geholfen!


6

Besser du benutzt

npm install -g nodemon

Ich benutze dies und es wird helfen, meine Entwicklungsgeschwindigkeit zu verbessern. Sie müssen keine Dateien für diese bearbeiten!.

nach der Installation

nodemon app.js

Nodemon ist gut, wenn Sie Ihren Server für jede Speicherung neu starten möchten. Wenn Sie jedoch Webstorm oder eine Idee mit automatischer Speicherung verwenden, wird Ihr Server weiterhin neu gestartet.
Vishnu KR

Genau Mr. Vishnu KR.
BINFAS K

1

Für alle, die jetzt zu dieser Frage kommen, scheint dies nicht mehr erforderlich zu sein. In einer Anwendung, die mit gestartet wurde, sails liftwird eine Grunzüberwachungsaufgabe ausgeführt, und Codeänderungen werden ohne Neustart angezeigt.

Ich wusste zunächst nicht, dass dies geschah, da nichts darauf hinweist, was in der Konsole passiert, aber es scheint ohne Neustart zu funktionieren (ich verwende Sails 0.11).


8
Ich glaube nicht, dass dies der Fall ist, ich muss die Segel immer noch neu starten, nachdem ich einen Controller
gewechselt habe

Ich muss auch die App neu starten, um meine Änderungen zu sehen.
user1007522
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.