Автоматическая перезагрузка приложения Sails.js при изменении кода?

В настоящее время кажется, что для любого изменения кода в приложении sails.js вам нужно вручную остановить сервер парусов и запустить sails lift еще раз, прежде чем вы сможете увидеть изменения.

Мне было интересно, есть ли какой-нибудь способ при запуске в режиме разработки для автоматического перезапуска сервера парусов при обнаружении изменения кода?

Ответ 1

Вы должны использовать наблюдателя как forever, nodemon или что-то еще...

Пример

  • Устанавливайте навсегда при запуске:

    sudo npm install -g forever

  • Запустите его:

    forever -w start app.js


Чтобы избежать бесконечного перезапуска, поскольку Sails записывает в папку .tmp, вы можете создать файл .foreverignore в каталог проекта и поместить это содержимое внутрь:

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

Смотрите вопрос о GitHub: Перезапуск навсегда из-за/.tmp.

Ответ 2

Вы можете использовать sails-hook-autoreload

Просто поднимите приложение как обычно, и когда вы добавляете/изменяете/удаляете модель или файл контроллера, все контроллеры и модели будут перезагружены без необходимости понижать/отменять приложение.

Ответ 3

Например, с помощью nodemon для просмотра каталогов api и config

.nodemonignore Содержание

views/*
.tmp/*
.git/*

Запустите команду после создания .nodemonignore

$> nodemon -w api -w config

Пример для супервизора для игнорирования 3-х каталогов

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

Ответ 4

Если вы используете Sails 0.11, вы можете установить этот крючок для автоматической перезагрузки при изменении моделей или контроллеров (представления не требуют перезагрузки):

npm install sails-hook-autoreload

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

Ответ 5

У меня была такая же проблема, и я решил ее использовать grunt-watch и grunt-forever с бета-версиями sails. Результатом является 4 команды grunt:

UPDATE: задачи доступны в текущей версии парусов (она больше не бета: > )

  • start Запускает сервер
  • остановить Останавливает сервер
  • перезагрузка Перезагружает сервер
  • startWatch Запускает сервер и ждет изменений, чтобы перезапустить его (используя grunt-watch). Это, вероятно, ваше решение, но другие команды также полезны.

Здесь код - я использую sails @beta, который включает в себя каталог задач, я не знаю, включено ли это в предыдущие версии:

  • Прежде всего, вы должны установить навсегда в своем каталоге парусов:

    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

и заставьте ваш сервер ждать перезапуска изменений: >

Надеюсь, это помогло!

Ответ 6

Для тех, кто приступает к этому вопросу сейчас, кажется, что это уже не нужно - приложение, запущенное с sails lift, будет запускать задачу grunt watch, а изменения кода будут видны без перезагрузки.

Я не понимал, что это происходит сначала, потому что нечего указывать, что происходит в консоли, но похоже, что он работает без перезагрузки (я использую Sails 0.11)

Ответ 7

Лучше использовать

npm install -g nodemon

Я использую это, и это поможет улучшить скорость разработки. нет необходимости редактировать файлы для этого!

после установки

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