दिलचस्प पोस्ट
टैब या विंडो सक्रिय नहीं होने पर ब्राउज़र कैसे जावास्क्रिप्ट को रोकते हैं? सर्वर JSF द्वारा बनाए गए HTML पृष्ठ में असिंक्रोनस परिवर्तन कैसे ला सकता है? जब उपयोगकर्ता jQuery के साथ div के नीचे स्क्रॉल करता है मैट्रिक्स बनाने के लिए वेक्टर का वेक्टर कैसे Android में JSONArray पार्स करने के लिए घातक त्रुटि: कक्षा 'MySQLi' नहीं मिला PHP: स्ट्रिंग में सभी गैर प्रिंट करने योग्य वर्ण कैसे निकालें? आर में स्ट्रिंग में शब्दों की संख्या की गणना करें? क्या पूरे पांडस सीरीज़ / डेटफ्रेम को प्रिंट करने के लिए कोई रास्ता नहीं है? Jtable के प्रत्येक पंक्ति में जेबटन जोड़ें लॉगआउट के बाद पहले से दौरा किए गए सुरक्षित पृष्ठ को देखने से उपयोगकर्ता को रोकें Matplotlib में एक colormap के मध्य बिंदु को परिभाषित एंड्रॉइड एनडीके में फ़ाइल संचालन क्या चारों को बिल्कुल 8-बिट लंबा होने की गारंटी है? जावा वेबएप में यूटीएफ -8 कैसे काम करना है?

कैसे Node.js में फ़ाइलों को स्वत: पुनः लोड करें?

संपादित करें: http://github.com/isaacs/node-supervisor का उपयोग करें; यह एक पुराना प्रश्न है और कोड का उदाहरण पुरानी नोड.जेएस एपीआई के साथ बनाया गया है।

मैं Node.js में फ़ाइलों के एक स्वत: पुनः लोड को कैसे लागू कर सकता हूं पर कोई भी विचार? हर बार जब मैं एक फ़ाइल बदलता हूं, तो मैं सर्वर को पुनरारंभ करने के थक गया हूँ स्पष्ट रूप से Node.js ' require() फ़ंक्शन फ़ाइलों को फिर से लोड नहीं करती यदि वे पहले से ही आवश्यक हो, तो मुझे कुछ ऐसा करने की आवश्यकता है:

 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 ); 

और मेरे पास app.js फ़ाइल में है:

 var file = require('./file'); this.app = function(req, res) { file.serveFile( req, res, 'file.js'); } 

लेकिन यह भी काम नहीं कर रहा है – मुझे process.compile() कथन में कोई त्रुटि मिलती है जिसमें कहा गया है कि 'आवश्यकता' परिभाषित नहीं है process.compile app.js evlying है , लेकिन node.js globals के बारे में कोई सुराग नहीं है।

वेब के समाधान से एकत्रित समाधान "कैसे Node.js में फ़ाइलों को स्वत: पुनः लोड करें?"

supervisor लिए एक अच्छा, अद्यतित विकल्प nodemon :

अपने नोड। जेएस एप्लिकेशन में किसी भी बदलाव की निगरानी करें और सर्वर को स्वचालित रूप से पुनरारंभ करें – विकास के लिए एकदम सही

nodemon उपयोग करने के लिए:

 $ npm install nodemon -g $ nodemon app.js 

नोड-पर्यवेक्षक भयानक है

सहेजने पर पुनरारंभ करने के लिए उपयोग:

 एनपीएम स्थापित पर्यवेक्षक-जी
 पर्यवेक्षक app.js

आईसाक द्वारा – http://github.com/isaacs/node-supervisor

मुझे एक आसान तरीका मिला:

 delete require.cache['/home/shimin/test2.js'] 

नोडोमोन पहले एक Google खोज में आया था, और यह चाल को करते हुए लगता है:

 npm install nodemon -g cd whatever_dir_holds_my_app nodemon app.js 

अगर कोई भी इस प्रश्न पर आता है और केवल मानक मॉड्यूल का उपयोग करके उसे हल करना चाहता है तो मैंने एक सरल उदाहरण बनाया है:

 var process = require('process'); var cp = require('child_process'); var fs = require('fs'); var server = cp.fork('server.js'); console.log('Server started'); fs.watchFile('server.js', function (event, filename) { server.kill(); console.log('Server stopped'); server = cp.fork('server.js'); console.log('Server started'); }); process.on('SIGINT', function () { server.kill(); fs.unwatchFile('server.js'); process.exit(); }); 

यह उदाहरण केवल एक फ़ाइल (server.js) के लिए है, लेकिन फ़ाइलों की सरणी का उपयोग करके एकाधिक फ़ाइलों के लिए अनुकूलित किया जा सकता है, सभी फ़ाइल नाम प्राप्त करने के लिए, या एक निर्देशिका देखकर पाश के लिए:

 fs.watch('./', function (event, filename) { // sub directory changes are not seen console.log(`restart server`); server.kill(); server = cp.fork('server.js'); }) 

यह कोड Node.js 0.8 एपीआई के लिए बनाया गया था, यह कुछ विशिष्ट जरूरतों के लिए अनुकूलित नहीं है लेकिन कुछ सरल एप्लिकेशन में काम करेगा।

अद्यतन: यह कार्यात्मक मेरे मॉड्यूल सरलआर , गिटहब रेपो में लागू किया गया है

नोड-पर्यवेक्षक है जो आप द्वारा स्थापित कर सकते हैं

 npm install supervisor 

http://github.com/isaacs/node-supervisor देखें

संपादित करें: मेरा उत्तर अप्रचलित है नोड। जेएस एक बहुत तेजी से बदलते हुए प्रौद्योगिकी है

मैं भी मॉड्यूल पुनः लोड करने के बारे में सोचा मैंने नोड । जेएस को संशोधित किया है और नेल्थ / नोड पर गिटौब पर स्रोत प्रकाशित किया है । फर्क सिर्फ इतना है कि फ़ंक्शन की require । इसमें एक वैकल्पिक दूसरा तर्क reload

 require(url, reload) 

वर्तमान निर्देशिका उपयोग में app.js को पुनः लोड करने के लिए

 app = require("./app", true); 

इस तरह से कुछ लिखें, और आपके पास स्वत : रीलोड है:

 process.watchFile(script_name, function(curr, prev) { module = reload(script_name, true); }); 

मैं देख रहा हूँ कि केवल एक समस्या चर module , लेकिन मैं अब इस पर काम कर रहा हूँ

अभी तक इस समस्या का एक अन्य समाधान हमेशा के लिए उपयोग कर रहा है

हमेशा की एक अन्य उपयोगी क्षमता यह है कि जब भी कोई स्रोत फ़ाइलों को बदल दिया गया है, तो यह वैकल्पिक रूप से आपके ऐप्लिकेशन को पुनः आरंभ कर सकता है। यह हर बार जब आप एक फीचर जोड़ते हैं या एक बग ठीक कर देते हैं, तब से मैन्युअल रूप से पुनरारंभ करने से आपको मुक्त करता है इस मोड में हमेशा के लिए शुरू करने के लिए, -w फ्लैग का उपयोग करें:

 forever -w start server.js 

इस विषय के बारे में एक नोड। जेएस मेलिंग सूची पर हाल ही में एक धागा था। संक्षिप्त जवाब नहीं है, वर्तमान में यह स्वत: पुनः लोड की जाने वाली फ़ाइलों की आवश्यकता नहीं है, लेकिन कई लोगों ने इस सुविधा को जोड़ने वाले पैच को विकसित किया है।

यहाँ नोड के लिए हॉट रिलोडिंग के बारे में एक ब्लॉग पोस्ट है यह एक गिथूब नोड शाखा प्रदान करता है जिसे आप हॉट रिलोडिंग को सक्षम करने के लिए नोड की स्थापना को बदलने के लिए उपयोग कर सकते हैं।

ब्लॉग से:

 var requestHandler = require('./myRequestHandler'); process.watchFile('./myRequestHandler', function () { module.unCacheModule('./myRequestHandler'); requestHandler = require('./myRequestHandler'); } var reqHandlerClosure = function (req, res) { requestHandler.handle(req, res); } http.createServer(reqHandlerClosure).listen(8000); 

अब, जब भी आप myRequestHandler.js को संशोधित करते हैं, उपरोक्त कोड स्थानीय कोडहार्डर को नए कोड के साथ नोटिस करेगा और प्रतिस्थापित करेगा। कोई भी मौजूदा अनुरोध पुराने कोड का उपयोग करना जारी रखेगा, जबकि कोई भी नए आवक अनुरोध नए कोड का उपयोग करेगा। सभी सर्वर को बंद किए बिना, किसी भी अनुरोध को उछले बिना, किसी भी अनुरोध को समय से पहले ही मारना, या एक बुद्धिमान लोड बैलेंसर पर निर्भर भी।

मैं एक ऐसी छोटी नोड "चीज" बनाने पर काम कर रहा हूं जो कि ऐड-यूज को लोड / अनलोड करने में सक्षम है (यानी, आप पूरे एप को नीचे लाए बिना अपने आवेदन के हिस्से को पुनः आरंभ करने में सक्षम हो सकते हैं)। मैं एक (बहुत बेवकूफ) निर्भरता प्रबंधन को शामिल कर रहा हूं, ताकि यदि आप किसी मॉड्यूल को रोकना चाहते हैं, तो उस पर निर्भर सभी मॉड्यूल भी बंद कर दिए जाएंगे।

अभी तक इतनी अच्छी है, लेकिन फिर मैंने इस मुद्दे पर ठोकर खाई कि कैसे मॉड्यूल पुनः लोड करें। जाहिर है, कोई भी "आवश्यकता" कैश से मॉड्यूल को निकाल सकता है और नौकरी कर सकता है। चूंकि मैं सीधे नोड स्रोत कोड को बदलने के लिए उत्सुक नहीं हूं, इसलिए मुझे एक बहुत ही हैक-हैक के साथ आया हूं: स्टैक में खोज "आवश्यक" फ़ंक्शन के अंतिम कॉल को ट्रेस करें, इसे "कैश" फ़ील्ड के संदर्भ में दबाएं और .. भी, नोड के संदर्भ को हटा दें:

  var args = arguments while(!args['1'] || !args['1'].cache) { args = args.callee.caller.arguments } var cache = args['1'].cache util.log('remove cache ' + moduleFullpathAndExt) delete( cache[ moduleFullpathAndExt ] ) 

यहां तक ​​कि आसान, वास्तव में:

 var deleteCache = function(moduleFullpathAndExt) { delete( require.cache[ moduleFullpathAndExt ] ) } 

जाहिर है, यह सिर्फ ठीक काम करता है। मुझे यह पता नहीं है कि तर्क क्या ["1"] का मतलब है, लेकिन यह अपना काम कर रहा है मुझे विश्वास है कि नोड लोग किसी दिन फिर से लोड सुविधा को लागू करेंगे, इसलिए मुझे लगता है कि अब यह समाधान स्वीकार्य है। (बीटीड। मेरी "बात" यहां होगी: https://github.com/cheng81/wirez , वहां कुछ हफ़्ते में जाएं और आपको देखना चाहिए कि मैं किस बारे में बात कर रहा हूँ)

नोड-देव महान काम करता है npm install node-dev

यह एक डेस्कटॉप अधिसूचना भी देता है जब सर्वर को पुनः लोड किया जाता है और संदेश पर सफलता या त्रुटियां प्रदान की जाती हैं।

कमांड लाइन के साथ अपने ऐप को प्रारंभ करें:

node-dev app.js

समाधान: http://github.com/shimondoodkin/node-hot-reload

ध्यान दें कि आपको अपने द्वारा इस्तेमाल किए गए संदर्भों का ध्यान रखना होगा।

इसका मतलब है कि अगर आपने किया: var x = need ('foo'); y = एक्स; z = x.bar; और गर्म इसे पुनः लोड

इसका मतलब है कि आपको x, y और z में संग्रहीत संदर्भों को बदलना होगा। गर्म reaload कॉलबैक समारोह में

कुछ लोग स्वत: पुनरारंभ करने के साथ हॉट रीलोड को भ्रमित करते हैं, मेरे नोडजेएस-ऑटोोरस्टाइट मॉड्यूल में भी बूट पर स्वतः आरंभ करने के लिए upstart एकीकरण होता है। अगर आपके पास एक छोटा ऐप ऑटो पुनरारंभ ठीक है, लेकिन जब आपके पास एक बड़ा ऐप होता है तो हॉट रीलोड अधिक उपयुक्त होता है। बस क्योंकि गर्म पुनः लोड तेजी से होता है

इसके अलावा, मैं अपने नोड-प्रवाह मॉड्यूल को पसंद करता हूं।

ऐसा नोडमॉन या अन्य टूल का उपयोग करने के लिए आवश्यक नहीं है। बस अपने आईडीई की क्षमताओं का उपयोग करें

संभवतः सबसे अच्छा एक है इंटेलीज वेबस्टॉर्म, नोड.जेएस के लिए गर्म पुनः लोड सुविधा (स्वचालित सर्वर और ब्राउज़र पुनः लोड) के साथ

इसे इस्तेमाल करो:

 function reload_config(file) { if (!(this instanceof reload_config)) return new reload_config(file); var self = this; self.path = path.resolve(file); fs.watchFile(file, function(curr, prev) { delete require.cache[self.path]; _.extend(self, require(file)); }); _.extend(self, require(file)); } 

आपको बस इतना करना है:

 var config = reload_config("./config"); 

और कॉन्फ़िग स्वचालित रूप से पुनः लोड हो जाएगी 🙂

loaddir एक त्वरित, त्वरित रूप से एक निर्देशिका की लोडिंग के लिए मेरा समाधान है

वापस आ सकते हैं

{ 'path/to/file': 'fileContents...' } या { path: { to: { file: 'fileContents'} } }

इसमें callback जिसे फ़ाइल बदल जाने पर कहा जाएगा।

यह ऐसे परिस्थितियों को संभालता है जहां फाइलें बड़ी हो जाती हैं, जो कि वे लिखने के पहले ही कॉल की जाती हैं

मैं इसे एक वर्ष या उससे भी अधिक समय तक परियोजनाओं में उपयोग कर रहा हूं, और हाल ही में इसके लिए वादे किए हैं।

मुझे यह परीक्षण लड़ाई में मदद!

https://github.com/danschumann/loaddir

आप शटडाउन सर्वर के बिना मॉड्यूल को पुनः लोड करने के लिए ऑटो-रीलोड का उपयोग कर सकते हैं।

इंस्टॉल करें

 npm install auto-reload 

उदाहरण

data.json

 { "name" : "Alan" } 

test.js

 var fs = require('fs'); var reload = require('auto-reload'); var data = reload('./data', 3000); // reload every 3 secs // print data every sec setInterval(function() { console.log(data); }, 1000); // update data.json every 3 secs setInterval(function() { var data = '{ "name":"' + Math.random() + '" }'; fs.writeFile('./data.json', data); }, 3000); 

परिणाम:

 { name: 'Alan' } { name: 'Alan' } { name: 'Alan' } { name: 'Alan' } { name: 'Alan' } { name: '0.8272748321760446' } { name: '0.8272748321760446' } { name: '0.8272748321760446' } { name: '0.07935990858823061' } { name: '0.07935990858823061' } { name: '0.07935990858823061' } { name: '0.20851597073487937' } { name: '0.20851597073487937' } { name: '0.20851597073487937' } 

किसी अन्य सरल समाधान का उपयोग करने के बजाय fs.readFile का उपयोग करना है, ताकि आप एक जेएसएन ऑब्जेक्ट के संदर्भ में पाठ फ़ाइल को सहेज सकें और इस ऑब्जेक्ट को पुनः लोड करने के लिए सर्वर पर अंतराल बना सकें।

पेशेवरों:

  • बाह्य लिब्स का उपयोग करने की कोई आवश्यकता नहीं है
  • उत्पादन के लिए प्रासंगिक (परिवर्तन पर कॉन्फ़िग फाइल पुनः लोड करना)
  • लागू करने में आसान

विपक्ष:

  • आप एक मॉड्यूल पुनः लोड नहीं कर सकते हैं – केवल एक जेएसएन युक्त कुंजी-मूल्य डेटा

उग्रेंट और पीएचपीएसटॉम का उपयोग करने वाले लोगों के लिए, फ़ाइल द्रष्टा एक तेज़ तरीका है

  • फाइलों के तात्कालिक सिंक को अक्षम करें ताकि आप कमांड को केवल सहेज सकें, फिर * .js फ़ाइलों और कार्य निर्देशिकाओं के लिए एक स्कोप बनाएं और यह कमांड जोड़ें

    vagrant ssh -c "/var/www/gadelkareem.com/forever.sh पुनः आरंभ"

जहां हमेशा के लिए

 #!/bin/bash cd /var/www/gadelkareem.com/ && forever $1 -l /var/www/gadelkareem.com/.tmp/log/forever.log -a app.js 

मैं हाल ही में इस प्रश्न पर आया था क्योंकि हमेशा की तरह संदिग्ध लिंक वाले पैकेजों के साथ काम नहीं कर रहे थे। अगर आप मुझे पसंद करते हैं और विकास के दौरान npm link का लाभ उठा रहे हैं, तो कई पैकेजों से बना एक परियोजना पर प्रभावी रूप से काम करने के लिए, यह महत्वपूर्ण है कि निर्भरता में होने वाले बदलावों को एक पुनः लोड भी ट्रिगर किया जा सके

नोड-मॉन्ड और 2 pm की कोशिश करने के बाद, यहां तक ​​कि नोड_मॉड्यूल फ़ोल्डर को देखने के लिए उनके निर्देशों का पालन करने के बाद, उन्होंने अभी भी परिवर्तन नहीं उठाए हैं हालांकि यहां उत्तर में कुछ कस्टम समाधान दिए गए हैं, इस तरह से कुछ के लिए, एक अलग पैकेज क्लीनर है आज मैं नोड-देव के पास आया और यह किसी भी विकल्प या कॉन्फ़िगरेशन के बिना पूरी तरह से काम करता है।

रीडमी से:

सुपरवाइज़र या नोडोम जैसे उपकरणों के विपरीत फाइलों को देखने के लिए फाइल सिस्टम को स्कैन नहीं करता। इसके बजाय नोड की आवश्यकता होती है केवल उन फ़ाइलों को देखने के लिए () फ़ंक्शन की जरूरत है