Adakah ide tentang bagaimana saya bisa menerapkan auto-reload file di Node.js? Saya bosan me-restart server setiap kali saya mengubah file. Rupanya require()
fungsi Node.js tidak memuat ulang file jika sudah diperlukan, jadi saya perlu melakukan sesuatu seperti ini:
var sys = require('sys'),
http = require('http'),
posix = require('posix'),
json = require('./json');
var script_name = '/some/path/to/app.js';
this.app = require('./app').app;
process.watchFile(script_name, function(curr, prev){
posix.cat(script_name).addCallback(function(content){
process.compile( content, script_name );
});
});
http.createServer(this.app).listen( 8080 );
Dan di file app.js yang saya miliki:
var file = require('./file');
this.app = function(req, res) {
file.serveFile( req, res, 'file.js');
}
Tapi ini juga tidak berfungsi - saya mendapatkan kesalahan dalam process.compile()
pernyataan yang mengatakan bahwa 'memerlukan' tidak didefinisikan. process.compile
sedang menghindari app.js , tetapi tidak memiliki petunjuk tentang node.js global.
javascript
node.js
disc0dancer
sumber
sumber
Object.keys(require.cache).forEach(function(key) { delete require.cache[key]; });
Jawaban:
Alternatif yang baik dan terkini
supervisor
adalahnodemon
:Untuk menggunakan
nodemon
:sumber
$ nodemon -L yourfile.js
(penjelasan lengkap di coderwall.com/p/aqxl_q )automatically restart the server - perfect for development
terlalu banyak hiperbola. Muat ulang server bisa berarti masuk ke layanan backend yang membutuhkan waktu lama dalam kasus saya. "Sempurna untuk pengembangan" akan menjadi sesuatu seperti kelas reload panas saat proses berjalan dalam memori tanpa kehilangan status apa yang dilakukan android studio ketika Anda mengubah kode sumber.npm install [--save-dev | -D] nodemon
untuk membatasi instalasi untuk ruang lingkup proyek.simpul-supervisor mengagumkan
penggunaan untuk memulai kembali pada save:
oleh isaacs - http://github.com/isaacs/node-supervisor
sumber
"C:\Program Files\nodejs\node.exe" C:\Users\Mark\AppData\Roaming\npm\node_modules\supervisor\lib\cli-wrapper.js app.js
npm install supervisor
,node node_modules/supervisor/lib/cli-wrapper.js app.js
(saya memiliki instalasi non-akar Node)PATH
saya menemukan cara sederhana:
sumber
delete require.cache[require.resolve('./mymodule.js')];
selesaikan kesepakatan dengan jalur nyata===
Jika seseorang masih datang ke pertanyaan ini dan ingin menyelesaikannya hanya dengan menggunakan modul standar, saya membuat contoh sederhana:
Contoh ini hanya untuk satu file (server.js), tetapi dapat diadaptasi ke beberapa file menggunakan array file, loop untuk mendapatkan semua nama file, atau dengan menonton direktori:
Kode ini dibuat untuk Node.js 0.8 API, tidak diadaptasi untuk beberapa kebutuhan spesifik tetapi akan berfungsi di beberapa aplikasi sederhana.
UPDATE: Fungsi ini diimplementasikan dalam modul simpleR saya , GitHub repo
sumber
watch
tidak diperlukan, memuat ulang dapat dilakukan tanpafs
, dengan mendengarkan sinyal yang berbeda.nodemon muncul pertama kali dalam pencarian google, dan tampaknya melakukan trik:
sumber
Ada Node-Supervisor yang dapat Anda instal
lihat http://github.com/isaacs/node-supervisor
sumber
Sunting: Jawaban saya sudah usang. Node.js adalah teknologi yang berubah sangat cepat.
Saya juga bertanya-tanya tentang memuat ulang modul. Saya memodifikasi node.js dan telah mempublikasikan sumbernya di Github di nalply / node . Satu-satunya perbedaan adalah fungsi
require
. Ini memiliki argumen kedua opsionalreload
.Untuk memuat ulang
app.js
dalam penggunaan direktori saat iniTulis sesuatu seperti ini, dan Anda memiliki auto- reload:
Satu-satunya masalah yang saya lihat adalah variabel
module
, tetapi saya sedang mengerjakannya sekarang.sumber
nodemon
adalah yang hebat. Saya hanya menambahkan lebih banyak parameter untuk opsi debugging dan menonton.package.json
Perintah:
nodemon --watch server --inspect ./server/server.js
Sedangkan:
--watch server
Restart aplikasi ketika mengubah.js
,.mjs
,.coffee
,.litcoffee
, dan.json
file dalamserver
folder (termasuk subfolder).--inspect
Aktifkan debug jarak jauh../server/server.js
Titik masuk.Kemudian tambahkan konfigurasi berikut ke
launch.json
(Kode VS) dan mulai debugging kapan saja.Perhatikan bahwa lebih baik untuk menginstal
nodemon
sebagai dependensi dev proyek. Jadi anggota tim Anda tidak perlu menginstalnya atau mengingat argumen perintah, mereka hanyanpm run dev
dan mulai meretas.Lihat lebih lanjut tentang
nodemon
dokumen: https://github.com/remy/nodemon#monitoring-multiple-directoriessumber
Ada utas terbaru tentang subjek ini di milis node.js. Jawaban singkatnya adalah tidak, saat ini tidak mungkin memuat ulang secara otomatis file yang diperlukan, tetapi beberapa orang telah mengembangkan tambalan yang menambahkan fitur ini.
sumber
solusi lain untuk masalah ini adalah menggunakan selamanya
sumber
simpul-dev berfungsi dengan baik. npm
install node-dev
Bahkan memberikan pemberitahuan desktop ketika server dimuat ulang dan akan memberikan keberhasilan atau kesalahan pada pesan.
mulai aplikasi Anda pada baris perintah dengan:
node-dev app.js
sumber
Berikut adalah posting blog tentang Hot Reloading for Node. Ini menyediakan cabang Node github yang dapat Anda gunakan untuk mengganti instalasi Node Anda untuk mengaktifkan Hot Reloading.
Dari blog:
sumber
Saya sedang bekerja membuat simpul kecil "hal" yang dapat memuat / membongkar modul sesuka hati (jadi, yaitu Anda bisa dapat me-restart bagian dari aplikasi Anda tanpa membawa seluruh aplikasi ke bawah). Saya menggabungkan manajemen ketergantungan (sangat bodoh), sehingga jika Anda ingin menghentikan modul, semua modul yang bergantung pada itu akan dihentikan juga.
Sejauh ini bagus, tapi kemudian saya menemukan masalah tentang cara memuat ulang modul. Rupanya, seseorang hanya dapat menghapus modul dari cache "memerlukan" dan menyelesaikan pekerjaan. Karena aku tidak tertarik untuk mengubah langsung kode sumber node, saya datang dengan sangat Hacky-hack yaitu: pencarian di jejak stack panggilan terakhir untuk "membutuhkan" fungsi, ambil referensi ke lapangan "cache" itu dan..ya, hapus referensi ke simpul:
Lebih mudah, sebenarnya:Rupanya, ini berfungsi dengan baik. Saya sama sekali tidak tahu apa arti argumen itu ["1"], tetapi ia melakukan tugasnya. Saya percaya bahwa orang-orang node akan menerapkan fasilitas reload suatu hari nanti, jadi saya kira untuk saat ini solusi ini dapat diterima juga. (btw. "benda" saya akan ada di sini: https://github.com/cheng81/wire , pergi ke sana dalam beberapa minggu dan Anda akan melihat apa yang saya bicarakan)
sumber
function (module, require) { /* your code */ }
. Ketika Anda mempertimbangkan ini,arguments[1]
menunjuk padarequire
. Dan loop sementara ada untuk situasi di mana Anda menyebutnya dari dalam fungsi lain dalam modul (itu hanya naik hirarki fungsi dan memeriksa nilai argumen yang diteruskan ke masing-masing).Anda dapat menggunakan nodemon dari NPM . Dan jika Anda menggunakan generator Express maka Anda dapat menggunakan perintah ini di dalam folder proyek Anda:
atau menggunakan mode Debug
Anda juga bisa langsung berlari
Semoga bantuan ini.
sumber
solusi di: http://github.com/shimondoodkin/node-hot-reload
perhatikan bahwa Anda harus mengurus sendiri referensi yang digunakan.
itu berarti jika Anda melakukannya: var x = membutuhkan ('foo'); y = x; z = x.bar; dan panas memuatnya kembali.
itu berarti Anda harus mengganti referensi yang disimpan dalam x, y dan z. dalam fungsi panggil balik hot reaload.
beberapa orang bingung hot reload dengan auto restart modul nodejs-autorestart saya juga memiliki integrasi pemula untuk mengaktifkan auto start saat boot. jika Anda memiliki aplikasi kecil restart otomatis baik-baik saja, tetapi ketika Anda memiliki aplikasi besar, hot reload lebih cocok. hanya karena hot reload lebih cepat.
Saya juga suka modul node-inflow saya.
sumber
Tidak perlu menggunakan nodemon atau alat lain seperti itu. Cukup gunakan kemampuan IDE Anda.
Mungkin salah satu yang terbaik adalah IntelliJ WebStorm dengan fitur isi ulang panas (server otomatis dan peramban ulang) untuk node.js .
sumber
Berikut adalah metode berteknologi rendah untuk digunakan di Windows. Masukkan ini dalam file batch yang disebut
serve.bat
:Sekarang alih-alih lari
node app.js
dari shell cmd Anda, jalankanserve app.js
.Ini akan membuka jendela shell baru yang menjalankan server. File batch akan memblokir (karena
/wait
) sampai Anda menutup jendela shell, pada titik mana shell cmd asli akan bertanya "Hentikan pekerjaan batch (Y / T)?" Jika Anda menjawab "N" maka server akan diluncurkan kembali.Setiap kali Anda ingin me-restart server, tutup jendela server dan jawab "N" di cmd shell.
sumber
struktur aplikasi saya:
instal ulang terlebih dahulu dengan perintah ini:
lalu ubah package.json :
sekarang Anda harus menggunakan memuat ulang di file server Anda :
dan untuk perubahan terakhir, akhir tanggapan Anda kirim skrip ini :
sekarang mulai aplikasi Anda dengan kode ini:
sumber
Gunakan ini:
Yang harus Anda lakukan sekarang adalah:
Dan config akan secara otomatis dimuat ulang :)
sumber
loaddir adalah solusi saya untuk memuat cepat suatu direktori, secara rekursif.
dapat kembali
{ 'path/to/file': 'fileContents...' }
atau{ path: { to: { file: 'fileContents'} } }
Ini memiliki
callback
yang akan dipanggil ketika file diubah.Ini menangani situasi di mana file cukup besar yang
watch
dipanggil sebelum mereka selesai menulis.Saya telah menggunakannya dalam proyek selama sekitar satu tahun, dan baru-baru ini menambahkan janji untuk itu.
Bantu aku pertempuran mengujinya!
https://github.com/danschumann/loaddir
sumber
Anda dapat menggunakan auto-reload untuk memuat kembali modul tanpa mematikan server.
Install
contoh
data.json
test.js
Hasil:
sumber
solusi sederhana lain adalah dengan menggunakan fs.readFile daripada menggunakan membutuhkan Anda dapat menyimpan file teks yang berisi objek json, dan membuat interval pada server untuk memuat ulang objek ini.
pro:
kontra:
sumber
Bagi orang yang menggunakan Vagrant dan PHPStorm, pengamat file adalah pendekatan yang lebih cepat
nonaktifkan sinkronisasi langsung file sehingga Anda menjalankan perintah hanya pada save lalu buat ruang lingkup untuk file * .js dan direktori kerja dan tambahkan perintah ini
vagrant ssh -c "/var/www/gadelkareem.com/forever.sh restart"
dimana selamanya. sh itu seperti
sumber
Saya baru-baru ini datang ke pertanyaan ini karena tersangka tidak bekerja dengan paket tertaut. Jika Anda seperti saya dan memanfaatkan
npm link
selama pengembangan untuk bekerja secara efektif pada proyek yang terdiri dari banyak paket, penting bahwa perubahan yang terjadi pada dependensi memicu pemuatan ulang juga.Setelah mencoba node-mon dan pm2, bahkan mengikuti instruksi mereka untuk tambahan menonton folder node_modules, mereka masih tidak menerima perubahan. Meskipun ada beberapa solusi khusus dalam jawaban di sini, untuk hal seperti ini, paket terpisah lebih bersih. Saya menemukan node-dev hari ini dan berfungsi dengan baik tanpa opsi atau konfigurasi.
Dari Readme:
sumber
sumber
Anda dapat melakukannya dengan menyegarkan browser . Aplikasi simpul Anda dimulai ulang secara otomatis, halaman hasil Anda di browser juga diperbarui secara otomatis. Kelemahannya adalah Anda harus meletakkan cuplikan js di laman yang dibuat. Inilah repo untuk contoh kerja.
sumber
Saya sudah mencoba PM2 : instalasi juga mudah dan mudah digunakan; hasilnya memuaskan. Namun, kita harus mengurus edisi PM2 mana yang kita inginkan. runtime pm 2 adalah edisi gratis, sedangkan perusahaan pm2 plus dan pm2 tidak gratis.
Sedangkan untuk Strongloop , instalasi saya gagal atau tidak lengkap, jadi saya tidak bisa menggunakannya.
sumber
Saat ini server WebPack dev dengan opsi panas digunakan. Anda dapat menambahkan skrip seperti ini di package.json Anda:
"hot": "cross-env NODE_ENV=development webpack-dev-server --hot --inline --watch-poll",
dan setiap perubahan pada file Anda akan memicu kompilasi ulang secara otomatis
sumber