web-dev-qa-db-fra.com

Rechargement automatique d'une application Sails.js sur les modifications de code?

Actuellement, il semble que pour tout changement de code dans une application sails.js, vous devez arrêter manuellement le serveur de voiles et exécuter sails lift encore avant que vous puissiez voir les changements.

Je me demandais s’il était possible, en mode développement, de redémarrer automatiquement le serveur Sails lorsqu’il détecte un changement de code.

101
subblue

Vous devez utiliser un observateur comme forever , nodemon , ou autre chose ...

Exemple

  1. Installez pour toujours en lançant:

    Sudo npm install -g forever

  2. Exécuter:

    forever -w start app.js


Pour éviter un redémarrage infini car Sails écrit dans .tmp dossier, vous pouvez créer un fichier .foreverignore dans le répertoire de votre projet et mettez ce contenu dans:

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

Voir le problème sur GitHub: Toujours redémarrer à cause de /.tmp .

73
Sandro Munda

Vous pouvez utiliser sails-hook-autoreload

Soulevez simplement votre application comme d'habitude. Lorsque vous ajoutez/modifiez/supprimez un modèle ou un fichier de contrôleur, tous les contrôleurs et modèles sont rechargés sans qu'il soit nécessaire de les baisser/redimensionner.

47
Vitalii Maslianok

Par exemple avec nodemon pour regarder les répertoires api et config

.nodemonignore Contenu

views/*
.tmp/*
.git/*

Exécutez la commande après avoir créé .nodemonignore

$> nodemon -w api -w config

Exemple pour que le superviseur ignore 3 répertoires

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

Si vous utilisez Sails 0.11, vous pouvez installer ce crochet pour recharger automatiquement lorsque vous changez de modèle ou de contrôleur (les vues ne nécessitent pas de rechargement):

npm install sails-hook-autoreload

https://www.npmjs.com/package/sails-hook-autoreload

8
Ben Fried

installer nodemon globalement ou localement.

npm install nodemon --save
npm install nodemon -g

installez sails localement dans votre projet comme suit

npm install sails --save

puis changez package.json

de

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

à

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

puis

npm run dev
7
Mujtaba Kably

J'ai eu le même problème et je l'ai résolu en utilisant grunt-watch et grunt-forever avec les tâches sails @ beta. Le résultat est 4 commandes grunt:

UPDATE: les tâches sont disponibles dans la version actuelle de voiles (ce n'est plus la version bêta:>)

  • start Démarre le serveur
  • stop Arrête le serveur
  • redémarrage Redémarre le serveur
  • startWatch Démarre le serveur et attend les changements pour le redémarrer (en utilisant grunt-watch). Ceci est probablement votre solution, mais les autres commandes sont également utiles.

Voici le code - j'utilise sails @ beta, qui inclut un répertoire tâches , je ne sais pas s'il est inclus dans les versions précédentes:

  • Tout d’abord, vous devez installer pour toujours dans votre répertoire voiles:

    npm install grunt-forever --save-dev
    
  • tasks/config/forever.js Configurez la tâche pour toujours.

    module.exports = function(grunt) {
      grunt.config.set('forever', {
        server: {
           options: {
              index: 'app.js',
              logDir: 'logs'
           }
        }
      });
    
      grunt.loadNpmTasks('grunt-forever');
    };
    
  • tasks/config/watch.js ( edit ) Modifier la tâche de surveillance afin d'ajouter une nouvelle règle

    // api and assets default rules
    ,
    server: {
        // Server files to watch:
        files: [
            'api/**/*',
            'config/**/*'
        ],
    
        // Restart server
        tasks: ['forever:server:restart']
    }
    
  • tasks/register/watchForever.js Enregistrez vos tâches personnalisées (ce fichier peut être renommé comme vous le souhaitez)

    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'
     ]);
    };
    

Avec cela, vous devriez pouvoir utiliser

    grunt startWatch

et faites attendre votre serveur que les modifications soient redémarrées:>

J'espère que cela a aidé!

7
josec89

Mieux vaut utiliser

npm install -g nodemon

j'utilise ceci, et cela aidera à améliorer ma vitesse de développement. pas besoin de modifier aucun fichier pour celui-ci!.

après l'installation

nodemon app.js
4
BINFAS BINU

Pour ceux qui viennent à cette question maintenant, il semble que cela n’est plus nécessaire - une application lancée avec sails lift aura une tâche de surveillance en cours d'exécution et les modifications de code seront visibles sans redémarrage.

Je n'avais pas réalisé que cela se passait au début car rien n'indique ce qui se passe dans la console, mais cela semble fonctionner sans redémarrage (j'utilise Sails 0.11).

1
Nick F