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


107

Наразі здається, що для будь-якої зміни коду в додатку sails.js вам доведеться вручну зупинити сервер вітрил і запустити його sails liftще раз, перш ніж ви зможете побачити зміни.

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

Відповіді:


74

Ви повинні використовувати спостерігач, як назавжди , нодемон , чи щось інше ...

Приклад

  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 не встановлено. Дефолт: 1000мс. Як встановити цю змінну?
Голінмарк

47

Ви можете використовувати вітрила-гачок-автозавантаження

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


1
Це здається найпростішим / найпростішим рішенням. Встановіть npm і додайте зразок autoreload.js в папку config, і ви в основному все зробили.
Braintapper

1
Абсолютно дивовижно. Найпростіший і найрідніший для Вітрила.
Олексій

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 та конфігурації каталогів

.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 з вітрилами @ beta завданнями. В результаті виходять 4 команди:

ОНОВЛЕННЯ: завдання доступні в поточній версії вітрила (це вже не бета:>)

  • start Запускає сервер
  • stop Зупиняє сервер
  • перезапуск Відновлює сервер
  • startWatch Запускає сервер і чекає змін, щоб його перезапустити (використовуючи grunt-watch). Це, мабуть, ваше рішення, але інші команди також корисні.

Ось код - я використовую sails @ beta, який включає в себе каталог завдань , я не знаю, чи включено це в попередні версії:

  • Перш за все, вам доведеться назавжди встановити у своєму каталозі вітрила:

    npm install grunt-forever --save-dev
  • завдання / config / forever.js Налаштувати завдання назавжди.

    module.exports = function(grunt) {
      grunt.config.set('forever', {
        server: {
           options: {
              index: 'app.js',
              logDir: 'logs'
           }
        }
      });
    
      grunt.loadNpmTasks('grunt-forever');
    };
  • задачі / config / watch.js ( редагувати ) Редагувати завдання перегляду, щоб додати нове правило

    // api and assets default rules
    ,
    server: {
        // Server files to watch:
        files: [
            'api/**/*',
            'config/**/*'
        ],
    
        // Restart server
        tasks: ['forever:server:restart']
    }
  • Завдання / зареєструватися / 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 добре, якщо ви хочете перезапустити сервер для кожного збереження. Але якщо ви використовуєте веб-шторм або будь-яку ідею з автоматичним збереженням, він буде постійно перезапускати ваш сервер.
Вишну KR

Саме пан Вішну К.Р.
BINFAS K

1

Для всіх, хто зараз приходить до цього питання, здається, що це більше не потрібно - програма, запущена в програмі, sails liftбуде виконувати завдання бурхливого перегляду, і зміни коду будуть видимі без перезавантаження.

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


8
Я не думаю, що це так, мені все ж доведеться перезапустити вітрила після зміни будь-якого контролера
fengd

Мені також потрібно перезапустити додаток, щоб побачити зміни.
користувач1007522
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.