在代码更改时自动重新加载Sails.js应用程序?

时间:2013-09-08 19:34:30

标签: node.js sails.js

目前看来,对于sails.js应用中的任何代码更改,您必须手动停止sails服务器并再次运行sails lift,然后才能看到更改。

我想知道在开发模式下运行时是否有任何方法可以在检测到代码更改时自动重启sails服务器?

8 个答案:

答案 0 :(得分:70)

您必须使用forevernodemon或其他类型的观察者......

实施例

  1. 通过运行

    来永久安装

    sudo npm install -g forever

  2. 运行它:

    forever -w start app.js


  3. 为避免无限次重启,因为Sails写入.tmp文件夹,您可以在项目目录中创建一个.foreverignore文件并将此内容放入:

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

    请参阅GitHub上的问题: Forever restarting because of /.tmp

答案 1 :(得分:46)

您可以使用sails-hook-autoreload

  

正常提升您的应用程序,当您添加/更改/删除模型或控制器文件时,将重新加载所有控制器和模型,而无需降低/重新移动应用程序。

答案 2 :(得分:42)

例如,使用nodemon来观看api和配置目录

.nodemonignore内容

views/*
.tmp/*
.git/*

创建.nodemonignore

后运行命令
$> nodemon -w api -w config

主管忽略3个目录的示例

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

答案 3 :(得分:8)

如果您正在使用Sails 0.11,则可以安装此挂钩以在更改模型或控制器时自动重新加载(视图不需要重新加载):

npm install sails-hook-autoreload

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

答案 4 :(得分:7)

我遇到了同样的问题,我使用grunt-watch和grunt-forever与sails @ beta任务解决了这个问题。结果是4个grunt命令:

更新:任务在当前风帆版本中可用(它不再是beta:>)

  • 开始启动服务器
  • 停止停止服务器
  • 重新启动重新启动服务器
  • startWatch 启动服务器并等待更改以重新启动它(使用grunt-watch)。这可能是您的解决方案,但其他命令也很有用。

这是代码 - 我正在使用sails @ beta,其中包含 tasks 目录,我不知道这是否包含在以前的版本中:

  • 首先,您必须永久安装在您的sails目录中:

    npm install grunt-forever --save-dev
    
  • tasks / config / forever.js 永远配置任务。

    module.exports = function(grunt) {
      grunt.config.set('forever', {
        server: {
           options: {
              index: 'app.js',
              logDir: 'logs'
           }
        }
      });
    
      grunt.loadNpmTasks('grunt-forever');
    };
    
  • tasks / config / watch.js(编辑编辑观看任务以添加新规则

    // api and assets default rules
    ,
    server: {
        // Server files to watch:
        files: [
            'api/**/*',
            'config/**/*'
        ],
    
        // Restart server
        tasks: ['forever:server:restart']
    }
    
  • tasks / register / watchForever.js 注册您的自定义任务(此文件可以重命名为您想要的任何内容)

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

有了这个你应该可以使用

    grunt startWatch

并让服务器等待重新启动更改:>

希望这有帮助!

答案 5 :(得分:7)

全局或本地安装 $('.modal-backdrop').remove();

nodemon

在您的项目中本地安装npm install nodemon --save npm install nodemon -g ,如下所示

sails

然后更改npm install sails --save

package.json

"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"
},

答案 6 :(得分:4)

更好的使用

npm install -g nodemon

我正在使用它,它将有助于提高我的开发速度。无需为此编辑任何文件!。

安装后

nodemon app.js

答案 7 :(得分:1)

对于现在提出这个问题的任何人来说,似乎不再需要这样做了 - 使用sails lift启动的应用程序将运行grunt监视任务,并且代码更改将在不重新启动的情况下可见。

我一开始并没有意识到这种情况正在发生,因为没有任何东西可以指示控制台中发生了什么,但它似乎没有重启(我正在使用Sails 0.11)