Memuat ulang aplikasi Sails.js secara otomatis saat kode berubah?

107

Saat ini tampaknya untuk setiap perubahan kode dalam aplikasi sails.js Anda harus menghentikan server layar secara manual dan menjalankannya sails liftlagi sebelum Anda dapat melihat perubahannya.

Saya bertanya-tanya apakah ada cara saat menjalankan mode pengembangan untuk secara otomatis memulai ulang server layar ketika mendeteksi perubahan kode?

subblue
sumber

Jawaban:

74

Anda harus menggunakan pengamat seperti forever , nodemon , atau sesuatu yang lain ...

Contoh

  1. Instal selamanya dengan menjalankan:

    sudo npm install -g forever

  2. Menjalankannya:

    forever -w start app.js


Untuk menghindari restart tanpa batas karena Sails menulis ke dalam .tmpfolder, Anda dapat membuat .foreverignorefile ke dalam direktori proyek Anda dan meletakkan konten ini di dalam:

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

Lihat masalah di GitHub: Selamanya dimulai ulang karena /.tmp .

Sandro Munda
sumber
7
Anda mungkin juga ingin menambahkan tampilan ke .foreverignorekarena tidak memerlukan restart untuk segera melihat perubahan. misalnya**/views/**
Seth Malaki
tapi sayangnya ini akan menyebabkan kode bootstrap dieksekusi lagi dan hilangnya sesi.
rahulserver
1
Saya menggunakan ini tetapi saya menerima peringatan berikut: --minUptime not set. Default ke: 1000ms. Bagaimana cara mengatur variabel ini?
Golinmarq
47

Anda dapat menggunakan sails-hook-autoreload

Angkat saja aplikasi Anda seperti biasa, dan saat Anda menambahkan / mengubah / menghapus model atau file pengontrol, semua pengontrol dan model akan dimuat ulang tanpa harus menurunkan / memuat ulang aplikasi.

Vitalii Maslianok
sumber
1
Ini tampaknya menjadi solusi paling sederhana / termudah. Instal npm dan tambahkan contoh autoreload.js ke dalam folder config dan pada dasarnya Anda sudah selesai.
Braintapper
1
Benar benar menakjubkan. Paling sederhana dan paling asli untuk Sails.
Alexus
Saya Details: Error: ER_ROW_IS_REFERENCED: Cannot delete or update a parent row: a foreign key constraint failterlempar 5/lib/node_modules/sails/lib/hooks/orm/index.js:221ketika saya menyimpan (menggunakan layar 11.3)
Gab
45

Misalnya dengan nodemonto watch api dan config direktori

.nodemonignore isi

views/*
.tmp/*
.git/*

Jalankan perintah setelah membuat .nodemonignore

$> nodemon -w api -w config

Contoh supervisor untuk mengabaikan 3 direktori

$> supervisor -i .tmp,.git,views app.js
woss
sumber
4
Saya suka nodemonsolusi atas foreversolusi yang diberikan bagaimana nodemonkeluaran pipa kembali ke stdout tanpa konfigurasi tambahan. Membuat alur kerja pengembangan lebih mudah.
Aaron Ransley
Untuk perintah saya hanya menggunakan .nodemonignorecontoh Anda dan menjalankan nodemon. Sejauh ini berhasil.
Michael J. Calkins
Bagi siapa pun yang bingung tentang cara menjalankan peluncuran di atas (setara dengan) sails lift, nodemon tahu cara menggunakannya app.js.
Tyler Collier
9

Jika Anda menggunakan Sails 0.11, Anda dapat menginstal hook ini untuk memuat ulang secara otomatis saat Anda mengubah model atau pengontrol (tampilan tidak memerlukan reload):

npm install sails-hook-autoreload

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

Ben Fried
sumber
1
Ini sudah disebutkan oleh jawaban Vitalii Maslianok sebelumnya.
Tyler Collier
8

instal nodemonsecara global atau lokal.

npm install nodemon --save
npm install nodemon -g

instal sailssecara lokal di proyek Anda sebagai berikut

npm install sails --save

lalu ganti package.json

dari

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

untuk

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

kemudian

npm run dev
Mujtaba Kably
sumber
7

Saya memiliki masalah yang sama dan saya telah menyelesaikannya menggunakan grunt-watch dan grunt-forever dengan tugas sails @ beta. Hasilnya adalah 4 perintah grunt:

PEMBARUAN: tugas tersedia dalam versi layar saat ini (tidak lagi beta:>)

  • start Memulai server
  • stop Menghentikan server
  • restart Restart server
  • startWatch Memulai server dan menunggu perubahan untuk memulai ulang (menggunakan grunt-watch). Ini mungkin solusi Anda, tetapi perintah lain juga berguna.

Ini kodenya - Saya menggunakan sails @ beta, yang menyertakan direktori tugas , saya tidak tahu apakah ini disertakan dalam versi sebelumnya:

  • Pertama-tama Anda harus menginstal selamanya di direktori layar Anda:

    npm install grunt-forever --save-dev
  • tugas / config / forever.js Konfigurasi tugas selamanya.

    module.exports = function(grunt) {
      grunt.config.set('forever', {
        server: {
           options: {
              index: 'app.js',
              logDir: 'logs'
           }
        }
      });
    
      grunt.loadNpmTasks('grunt-forever');
    };
  • tugas / config / watch.js ( edit ) Edit tugas jam tangan untuk menambahkan aturan baru

    // api and assets default rules
    ,
    server: {
        // Server files to watch:
        files: [
            'api/**/*',
            'config/**/*'
        ],
    
        // Restart server
        tasks: ['forever:server:restart']
    }
  • tugas / register / watchForever.js Daftarkan tugas khusus Anda (file ini dapat diganti namanya menjadi apa pun yang Anda inginkan)

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

Dengan ini Anda harus bisa menggunakan

    grunt startWatch

dan membuat server Anda menunggu perubahan dimulai ulang:>

Semoga ini membantu!

josec89
sumber
6

Lebih baik Anda gunakan

npm install -g nodemon

saya menggunakan ini, dan ini akan membantu meningkatkan kecepatan perkembangan saya. tidak perlu mengedit file apa pun untuk yang ini !.

setelah instalasi

nodemon app.js
BINFAS K
sumber
Nodemon bagus jika Anda ingin me-restart server Anda untuk setiap penyimpanan. Tetapi jika Anda menggunakan webstorm atau ide apa pun dengan simpan otomatis, itu akan terus merestart server Anda.
Wisnu KR
Tepatnya Bapak Wisnu KR.
BINFAS K
1

Bagi siapa pun yang datang ke pertanyaan ini sekarang, tampaknya ini tidak lagi diperlukan - aplikasi yang diluncurkan dengan sails liftakan menjalankan tugas arloji kasar, dan perubahan kode akan terlihat tanpa memulai ulang.

Saya tidak menyadari ini terjadi pada awalnya karena tidak ada yang menunjukkan apa yang terjadi di konsol, tetapi tampaknya berfungsi tanpa restart (saya menggunakan Sails 0.11)

Nick F.
sumber
8
Saya rasa ini tidak terjadi, saya masih harus memulai ulang layar setelah saya mengganti pengontrol apa pun
fengd
Saya juga perlu memulai ulang aplikasi untuk melihat perubahan saya.
pengguna1007522