Auto reloading a Sails.js app on code changes?

匿名 (未验证) 提交于 2019-12-03 02:38:01

问题:

Currently is seems that for any code change in a sails.js app you have to manually stop the sails server and run sails lift again before you can see the changes.

I was wondering if there is any way when running in development mode to automatically restart the sails server when it detects a code change?

回答1:

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.



回答2:

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.



回答3:

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 


回答4:

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



回答5:

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!



回答6:

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 


回答7:

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 


回答8:

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)



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