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


107

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

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

Ответы:


74

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

пример

  1. Установить навсегда , запустив:

    sudo npm install -g forever

  2. Запустить его:

    forever -w start app.js


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

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

См. Проблему на GitHub: вечный перезапуск из-за /.tmp .


7
Вы также можете добавить представления, .foreverignoreпоскольку они не требуют перезапуска для немедленного просмотра изменений. например**/views/**
Сет Малаки

но, к сожалению, это приведет к повторному выполнению кода начальной загрузки и потере сеансов.
rahulserver

1
Я использовал это, но получаю следующее предупреждение: --minUptime not set. По умолчанию: 1000 мс. Как мне установить эту переменную?
Golinmarq

47

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

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


1
Это кажется самым простым / легким решением. Установите npm и добавьте образец autoreload.js в папку config, и в основном все готово.
Braintapper

1
Совершенно потрясающе. Самый простой и наиболее естественный для Sails.
Alexus

Im получения 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)
Габ

45

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

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

views/*
.tmp/*
.git/*

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

$> nodemon -w api -w config

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

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

4
Мне нравится nodemonрешение по сравнению с foreverрешением, учитывая, как nodemonтрубы возвращаются в стандартный вывод без дополнительной настройки. Облегчает рабочий процесс разработки.
Аарон Рэнсли

Для команды я просто использовал ваш .nodemonignoreпример и запустил nodemon. Пока работает.
Майкл Дж. Калкинс,

Для всех, кто не sails liftпонимает, как запускать вышеупомянутый запуск (эквивалент) , nodemon знает, как использовать app.js.
Тайлер Кольер

9

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

npm install sails-hook-autoreload

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


1
Об этом уже говорилось в предыдущем ответе Виталия Маслянка.
Тайлер Кольер

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

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

ОБНОВЛЕНИЕ: задачи доступны в текущей версии парусов (это уже не бета:>)

  • start Запускает сервер
  • stop Останавливает сервер
  • перезапуск Перезагружает сервер
  • 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

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

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


6

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

npm install -g nodemon

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

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

nodemon app.js

Nodemon хорош, если вы хотите перезагружать сервер при каждом сохранении. Но если вы используете webstorm или любой ide с автосохранением, он будет постоянно перезагружать ваш сервер.
Вишну К.Р.

Ровно господин Вишну К.Р.
BINFAS K

1

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

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


8
Я не думаю, что это так, мне все равно придется перезапускать паруса после смены любого контроллера
fengd

Мне также нужно перезапустить приложение, чтобы увидеть мои изменения.
user1007522
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.