web-dev-qa-db-ja.com

コードの変更時にSails.jsアプリを自動再読み込みしますか?

現在、sails.jsアプリのコードを変更する場合は、sailsサーバーを手動で停止してsails lift変更を確認する前にもう一度。

開発モードで実行しているときに、コードの変更を検出したときに、sailsサーバーを自動的に再起動する方法があるかどうか疑問に思っていましたか?

101
subblue

forevernodemon などのウォッチャーを使用する必要があります...

  1. 次を実行してforeverをインストールします:

    Sudo npm install -g forever

  2. それを実行します:

    forever -w start app.js


Sailsが.tmpフォルダーに書き込むために無限に再起動しないようにするには、プロジェクトディレクトリに.foreverignoreファイルを作成し、このコンテンツを内部に配置します。

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

GitHubの問題を参照してください: /。tmpのために再起動しない

73
Sandro Munda

sails-hook-autoreload を使用できます

通常どおりアプリを持ち上げるだけで、モデルまたはコントローラーファイルを追加/変更/削除すると、アプリを下げたり持ち上げたりすることなく、すべてのコントローラーとモデルがリロードされます。

47

たとえば、nodemonを使用して、apiおよびconfigディレクトリを監視します

.nodemonignore内容

views/*
.tmp/*
.git/*

.nodemonignoreを作成した後にコマンドを実行します

$> nodemon -w api -w config

3つのディレクトリを無視するスーパーバイザーの例

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

Sails 0.11を使用している場合は、このフックをインストールして、モデルまたはコントローラーを変更したときに自動的にリロードできます(ビューではリロードは不要です)。

npm install sails-hook-autoreload

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

8
Ben Fried

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
Mujtaba Kably

私も同じ問題を抱えていましたが、sunts @ betaタスクでgrunt-watchとgrunt-foreverを使用して解決しました。結果は、4つのうっとりするようなコマンドです:

更新:現在のセールバージョンでタスクを利用できます(ベータ版ではなくなりました:>)

  • startサーバーを起動します
  • stopサーバーを停止します
  • restartサーバーを再起動します
  • startWatchサーバーを起動し、変更を待って再起動します(grunt-watchを使用)。これはおそらくあなたのソリューションですが、他のコマンドも役立ちます。

ここにコードがあります-私はtasksディレクトリを含む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

変更が再起動されるまでサーバーを待機させます:>

これが役に立てば幸いです!

7
josec89

より良い使用

npm install -g nodemon

私はこれを使用しています、そしてそれは私の開発速度を改善するのに役立ちます。このファイルを編集する必要はありません!.

インストール後

nodemon app.js
4
BINFAS BINU

今この質問に来ている人にとって、これはもはや必要ではないようです-sails liftには、うっとうしい監視タスクが実行され、コードの変更は再起動なしで表示されます。

コンソールで何が起こっているかを示すものがないため、最初はこれが起こっていたことに気付きませんでしたが、再起動せずに動作するようです(Sails 0.11を使用しています)

1
Nick F