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


107

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

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

Answers:


74

您必须使用forevernodemon或其他类似的观察器...

  1. 通过运行以下命令永久安装:

    sudo npm install -g forever

  2. 运行:

    forever -w start app.js


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

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

请参阅GitHub上的问题: 由于/.tmp而永远重启


7
您可能还需要添加视图,.foreverignore因为它们不需要重新启动即可立即查看更改。例如**/views/**
Seth Malaki 2014年

但不幸的是,这将导致重新执行引导代码并丢失会话。
rahulserver '16

1
我使用了此方法,但收到以下警告:--minUptime未设置。默认值为:1000ms。如何设置此变量?
Golinmarq '16

47

您可以使用sails-hook-autoreload

只需正常启动应用程序,然后在添加/更改/删除模型或控制器文件时,将重新加载所有控制器和模型,而无需降低/重新启动应用程序。


1
这似乎是最简单/最简单的解决方案。安装npm并将示例autoreload.js添加到config文件夹中,您基本上已经完成。
Braintapper 2015年

1
非常精彩。Sails最简单,最原生。
Alexus

我在保存时被Details: Error: ER_ROW_IS_REFERENCED: Cannot delete or update a parent row: a foreign key constraint fail抛弃5/lib/node_modules/sails/lib/hooks/orm/index.js:221(使用帆11.3)
Gab 2015年

45

例如nodemon用于监视api和config目录

.nodemonignore 内容

views/*
.tmp/*
.git/*

创建.nodemonignore后运行命令

$> nodemon -w api -w config

主管忽略3个目录的示例

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

4
考虑到管道如何在不进行其他配置的情况下输出回stdout,我更喜欢该nodemon解决forever方案nodemon。使开发工作流程更容易。
亚伦·兰斯利

对于命令,我仅使用您的.nodemonignore示例并运行nodemon。到目前为止,它仍然有效。
Michael J. Calkins 2014年

对于其他人对如何运行上述启动感到困惑(等效)sails lift,nodemon知道使用app.js
泰勒·科利尔


8

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

7

我遇到了同样的问题,我已经通过使用发牢骚手表和永久发声解决了sails @ beta任务。结果是4个grunt命令:

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

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

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

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

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

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

    // api and assets default rules
    ,
    server: {
        // Server files to watch:
        files: [
            'api/**/*',
            'config/**/*'
        ],
    
        // Restart server
        tasks: ['forever:server:restart']
    }
  • task / 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

并让您的服务器等待更改重新开始:>

希望这对您有所帮助!


6

更好地使用

npm install -g nodemon

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

安装后

nodemon app.js

如果要为每次保存重新启动服务器,Nodemon很好。但是,如果您使用的是webstorm或具有自动保存功能的任何工具,它将继续重新启动服务器。
Vishnu KR

正是Vishnu KR先生。
BINFAS K

1

对于现在遇到此问题的任何人,似乎都不再需要-启动的应用程序sails lift将具有运行正常的监视任务,并且无需重新启动即可看到代码更改。

我最初没有意识到这是因为没有任何迹象表明控制台中正在发生的事情,但是它似乎不需要重启就可以工作(我使用的是Sails 0.11)


8
我认为情况并非如此,更换控制器后我仍然必须重新启动帆
fengd

我还需要重新启动应用程序才能查看我的更改。
user1007522 '18
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.