Auto reloading a Sails.js app on code changes?

大兔子大兔子 提交于 2019-11-27 06:09:29
Sandro Munda

You have to use a watcher like forever, nodemon, or something else...

Example

  1. Install forever by running:

    sudo npm install -g forever

  2. Run it:

    forever -w start app.js


To avoid infinite restart because Sails writes into .tmp folder, you can create a .foreverignore file into your project directory and put this content inside:

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

See the issue on GitHub: Forever restarting because of /.tmp.

You can use sails-hook-autoreload

Just lift your app as normal, and when you add / change / remove a model or controller file, all controllers and models will be reloaded without having to lower / relift the app.

For example with nodemon to watch api and config directories

.nodemonignore contents

views/*
.tmp/*
.git/*

Run the command after creating .nodemonignore

$> nodemon -w api -w config

Example for supervisor to ignore 3 directories

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

If you're using Sails 0.11, you can install this hook to automatically reload when you change models or controllers (views do not require reloading):

npm install sails-hook-autoreload

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

I had the same problem and I have solved it using grunt-watch and grunt-forever with sails@beta tasks. The result is 4 grunt commands:

UPDATE: tasks are available in the current sails version (it's no longer beta :>)

  • start Starts the server
  • stop Stops the server
  • restart Restarts the server
  • startWatch Starts the server and waits for changes to restart it (using grunt-watch). This is probably your solution, but the other commands are also useful.

Here's the code - I'm using sails@beta, which includes a tasks directory, I don't know if this is included in previous versions:

  • First of all you have to install forever in your sails directory:

    npm install grunt-forever --save-dev
    
  • tasks/config/forever.js Configure forever task.

    module.exports = function(grunt) {
      grunt.config.set('forever', {
        server: {
           options: {
              index: 'app.js',
              logDir: 'logs'
           }
        }
      });
    
      grunt.loadNpmTasks('grunt-forever');
    };
    
  • tasks/config/watch.js (edit) Edit watch task in order to add a new rule

    // api and assets default rules
    ,
    server: {
        // Server files to watch:
        files: [
            'api/**/*',
            'config/**/*'
        ],
    
        // Restart server
        tasks: ['forever:server:restart']
    }
    
  • tasks/register/watchForever.js Register your custom tasks (this file can be renamed to whatever you want)

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

With this you should be able to use

    grunt startWatch

and make your server wait for changes to be restarted :>

Hope this helped!

install nodemon globally or locally.

npm install nodemon --save
npm install nodemon -g

install sails locally in you project as follows

npm install sails --save

then change package.json

from

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

to

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

then

npm run dev

Better you use

npm install -g nodemon

i am using this, and it will helps to improve my developing speed. no need to edit any files for this one!.

after installation

nodemon app.js

For anyone coming to this question now, it seems that this is no longer necessary - an application launched with sails lift will have a grunt watch task running, and code changes will be visible without a restart.

I didn't realise this was happening at first because there's nothing to indicate what's happening in the console, but it does seem to work without a restart (I'm using Sails 0.11)

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!