107

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

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

4

8 回答 8

75

您必须使用像forevernodemon或其他东西这样的观察者......

例子

  1. 通过运行永久安装:

    sudo npm install -g forever

  2. 运行:

    forever -w start app.js


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

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

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

于 2013-09-08T19:38:54.837 回答
48

您可以使用sails-hook-autoreload

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

于 2015-02-23T17:13:04.623 回答
45

例如nodemon监视 api 和 config 目录

.nodemonignore内容

views/*
.tmp/*
.git/*

创建 .nodemonignore 后运行命令

$> nodemon -w api -w config

主管忽略 3 个目录的示例

$> supervisor -i .tmp,.git,views app.js
于 2013-12-13T12:53:49.633 回答
9

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

npm install sails-hook-autoreload

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

于 2015-07-14T04:32:48.800 回答
9

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

然后

npm run dev
于 2017-03-22T06:57:41.707 回答
7

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

更新:当前的sails版本中提供了任务(它不再是测试版:>)

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

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

  • 首先,您必须永久安装在您的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 ( edit )编辑监视任务以添加新规则

    // 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

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

希望这有帮助!

于 2014-08-11T08:21:45.160 回答
6

更好地使用

npm install -g nodemon

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

安装后

nodemon app.js
于 2017-01-11T18:03:24.783 回答
1

对于现在提出这个问题的任何人来说,这似乎不再需要 - 启动的应用程序sails lift将运行 grunt watch 任务,并且无需重新启动即可看到代码更改。

起初我没有意识到这是发生的,因为没有任何迹象表明控制台中发生了什么,但它似乎无需重新启动就可以工作(我使用的是 Sails 0.11)

于 2015-05-06T09:04:57.740 回答