Recarregando automaticamente um aplicativo Sails.js em alterações de código?

107

Atualmente, parece que para qualquer alteração de código em um aplicativo sails.js, você deve parar manualmente o servidor sails e executar sails liftnovamente antes de ver as alterações.

Eu queria saber se existe alguma maneira ao executar no modo de desenvolvimento para reiniciar automaticamente o servidor sails quando detecta uma alteração no código?

sub-azul
fonte

Respostas:

74

Você tem que usar um observador como para sempre , nodemon ou outra coisa ...

Exemplo

  1. Instale para sempre executando:

    sudo npm install -g forever

  2. Executá-lo:

    forever -w start app.js


Para evitar a reinicialização infinita porque o Sails grava na .tmppasta, você pode criar um .foreverignorearquivo no diretório do seu projeto e colocar este conteúdo dentro de:

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

Veja o problema no GitHub: Sempre reiniciando por causa de /.tmp .

Sandro Munda
fonte
7
Você também pode adicionar visualizações, .foreverignorepois elas não precisam ser reiniciadas para ver as alterações imediatamente. por exemplo**/views/**
Seth Malaki
mas, infelizmente, isso levará à execução do código de bootstrap novamente e à perda de sessões.
rahulserver
1
Usei isso, mas recebo o seguinte aviso: --minUptime não definido. Padronizado para: 1000ms. Como faço para definir essa variável?
Golinmarq de
47

Você pode usar sails-hook-autoreload

Basta levantar seu aplicativo normalmente e quando você adicionar / alterar / remover um modelo ou arquivo de controlador, todos os controladores e modelos serão recarregados sem ter que abaixar / relift o aplicativo.

Vitalii Maslianok
fonte
1
Esta parece ser a solução mais simples / fácil. Instale o npm e adicione o autoreload.js de amostra à pasta config e está tudo pronto.
Braintapper
1
Absolutamente surpreendente. Mais simples e mais nativo do Sails.
Alexus
Estou ficando Details: Error: ER_ROW_IS_REFERENCED: Cannot delete or update a parent row: a foreign key constraint failconfuso 5/lib/node_modules/sails/lib/hooks/orm/index.js:221quando salvo (usando velas 11.3)
Gab
45

Por exemplo, com nodemonpara observar os diretórios api e config

.nodemonignore conteúdo

views/*
.tmp/*
.git/*

Execute o comando após criar .nodemonignore

$> nodemon -w api -w config

Exemplo de supervisor para ignorar 3 diretórios

$> supervisor -i .tmp,.git,views app.js
woss
fonte
4
Eu gosto da nodemonsolução em relação à foreversolução dada como os nodemontubos de saída de volta para o padrão sem configuração adicional. Facilita o fluxo de trabalho de desenvolvimento.
Aaron Ransley de
Para o comando, usei apenas o seu .nodemonignoreexemplo e executei nodemon. Funciona até agora.
Michael J. Calkins
Para qualquer pessoa que esteja confusa sobre como executar as inicializações acima (o equivalente a) sails lift, o nodemon sabe usar app.js.
Tyler Collier
9

Se você estiver usando Sails 0.11, você pode instalar este gancho para recarregar automaticamente quando você mudar de modelos ou controladores (visualizações não requerem recarga):

npm install sails-hook-autoreload

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

Ben Fried
fonte
1
Isso já foi mencionado pela resposta anterior de Vitalii Maslianok.
Tyler Collier
8

instalar nodemonglobalmente ou localmente.

npm install nodemon --save
npm install nodemon -g

instale sailslocalmente em seu projeto como segue

npm install sails --save

então mude package.json

de

"scripts": {
  "debug": "node debug app.js",
  "start": "node app.js"
},

para

"scripts": {
   "debug": "node debug app.js",
   "start": "node app.js",
   "dev": "export NODE_ENV=development && nodemon --ignore 'tmp/*' app.js && exit 0"
},

então

npm run dev
Mujtaba Kably
fonte
7

Eu tive o mesmo problema e resolvi usando grunt-watch e grunt-forever com tarefas sails @ beta. O resultado são 4 comandos grunt:

ATUALIZAÇÃO: as tarefas estão disponíveis na versão atual das velas (não é mais beta:>)

  • start Inicia o servidor
  • parar Para o servidor
  • reiniciar Reinicia o servidor
  • startWatch Inicia o servidor e espera por mudanças para reiniciá-lo (usando grunt-watch). Esta é provavelmente a sua solução, mas os outros comandos também são úteis.

Aqui está o código - estou usando sails @ beta, que inclui um diretório de tarefas , não sei se isso está incluído nas versões anteriores:

  • Em primeiro lugar, você deve instalar para sempre no diretório de velas:

    npm install grunt-forever --save-dev
  • tasks / config / forever.js Configure a tarefa forever.

    module.exports = function(grunt) {
      grunt.config.set('forever', {
        server: {
           options: {
              index: 'app.js',
              logDir: 'logs'
           }
        }
      });
    
      grunt.loadNpmTasks('grunt-forever');
    };
  • tarefas / config / watch.js ( editar ) Editar tarefa de observação para adicionar uma nova regra

    // api and assets default rules
    ,
    server: {
        // Server files to watch:
        files: [
            'api/**/*',
            'config/**/*'
        ],
    
        // Restart server
        tasks: ['forever:server:restart']
    }
  • tasks / register / watchForever.js Registre suas tarefas personalizadas (este arquivo pode ser renomeado para o que você quiser)

    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'
     ]);
    };

Com isso, você deve ser capaz de usar

    grunt startWatch

e faça seu servidor esperar que as mudanças sejam reiniciadas:>

Espero que tenha ajudado!

Josec89
fonte
6

Melhor você usar

npm install -g nodemon

estou usando isso e ajuda a melhorar minha velocidade de desenvolvimento. não há necessidade de editar nenhum arquivo para este !.

depois da instalação

nodemon app.js
BINFAS K
fonte
O Nodemon é bom se você quiser reiniciar o servidor a cada salvamento. Mas se você estiver usando webstorm ou qualquer ide com salvamento automático, ele continuará reiniciando o servidor continuamente.
Vishnu KR
Exatamente Mr.Vishnu KR.
BINFAS K
1

Para quem está se perguntando agora, parece que isso não é mais necessário - um aplicativo iniciado com sails liftterá uma tarefa de observação grunhida em execução e as alterações de código serão visíveis sem uma reinicialização.

Não percebi que isso estava acontecendo a princípio porque não há nada que indique o que está acontecendo no console, mas parece funcionar sem reiniciar (estou usando o Sails 0.11)

Nick F
fonte
8
Não acho que seja esse o caso, ainda tenho que reiniciar as velas depois de mudar qualquer controlador
fengd
Também preciso reiniciar o aplicativo para ver minhas alterações.
user1007522