Node.js में फ़ाइलों को ऑटो-रीलोड कैसे करें?


444

कैसे मैं 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.compileapp.js evaling है , लेकिन नोड के बारे में कोई सुराग नहीं है। ग्लोबल्स।


4
आप जानते हैं कि आप इस कोड को प्रत्येक अनुरोध पर चला सकते हैं:Object.keys(require.cache).forEach(function(key) { delete require.cache[key]; });
टॉवर

जवाबों:


562

एक अच्छा, अप टू डेट विकल्प supervisorहै nodemon:

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

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

$ npm install nodemon -g
$ nodemon app.js

2
और यदि आप इसे नाइट्रूइयो में उपयोग करना चाहते हैं - $ nodemon -L yourfile.js( कोडरवॉल पर पूर्ण विवरण / p / aqxl_q )
drzaus

3
लेकिन इस मामले में, यह सर्वर प्रक्रिया को भी पुनरारंभ करता है।
फिलिप

@ सही, आप सही हैं। मुझे पुनः लॉगिन करने के लिए पुनः निर्देशित किया गया है। काश यह केवल उस विशिष्ट संशोधित मॉड्यूल को लोड करता।
२०१२ में

8
automatically restart the server - perfect for developmentरास्ता बहुत अधिक अतिशयोक्ति है। रिलोडिंग सर्वर का मतलब बैकएंड सेवाओं में लॉगिंग हो सकता है जो मेरे मामले में लंबा समय लेता है। "डेवलपमेंट के लिए परफेक्ट" हॉट-रीलोडिंग क्लासेस जैसा कुछ होगा जबकि स्टेट कोड खो जाने के बिना प्रोसेस खोए बिना मेमोरी में चल रहा है जब आप सोर्स कोड बदलते हैं।
nurettin

2
npm install [--save-dev | -D] nodemonप्रोजेक्ट स्कोप में इंस्टॉलेशन को सीमित करने के लिए उपयोग ।
थीमफील्ड

312

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

सहेजने पर पुनः आरंभ करने का उपयोग:

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

by isaacs - http://github.com/isaacs/node-supervisor


3
npm स्थापित -g पर्यवेक्षक। इसे विश्व स्तर पर स्थापित किया जाना चाहिए।
कमल रेड्डी

OSx 10.2.8 पर मुझे इसे sudo
Timopheym

2
विंडोज के तहत इसे इस तरह चलाना था:"C:\Program Files\nodejs\node.exe" C:\Users\Mark\AppData\Roaming\npm\node_modules\supervisor\lib\cli-wrapper.js app.js
MPen

1
बिना जी या एप्लिकेशन जड़ में sudo: npm install supervisor, node node_modules/supervisor/lib/cli-wrapper.js app.js(मैं नोड के एक गैर-मूल स्थापना है)
एच-Kippo

1
@ मार्क इसका मतलब है कि नोड आपके लिए नहीं हैPATH
Blaise

88

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

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

7
यह बहुत अच्छा है अगर आप ऐप को फिर से शुरू किए बिना बाहरी पुस्तकालयों को फिर से लोड करना चाहते हैं - मेरे मामले में, एक आईआरसी बॉट।
मिशेल टाइली

यह उत्कृष्ट है! इतना सरल और इतना अच्छा काम करता है। जब भी एक निवेदन आता है, मैं सिर्फ उन फाइलों का एक गुच्छा तैयार करता हूं जो राज्य में नहीं हैं।
विघ्न

16
delete require.cache[require.resolve('./mymodule.js')]; वास्तविक रास्तों के साथ सौदा हल करें
एडुआर्डो

क्या यह "बुरा व्यवहार" या "केवल विकास" करना या माना जाना सुरक्षित है?
जॉच

2
@ जोकल मुझे लगता है कि यह सुरक्षित नहीं है, क्योंकि यह कक्षाओं और कार्यों या कुछ भी निर्यात को फिर से बना सकता है, जिसके परिणामस्वरूप तुलना करने पर अलग-अलग संदर्भ ===
मिलते हैं

20

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

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 एपीआई के लिए बनाया गया था, यह कुछ विशिष्ट आवश्यकताओं के लिए अनुकूलित नहीं है, लेकिन कुछ सरल ऐप में काम करेगा।

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


1
यह एक बेहतरीन और सरल उपाय है। मैंने इसे सिर्फ एक बॉट के लिए इस्तेमाल किया था जो कि एक मॉडरेटर द्वारा बताए जाने पर खुद को गिट से अपडेट करने वाला था। समस्या यह थी कि एक बार जब आप ऐप के अंदर हो जाते हैं तो आप स्वयं को पुनः आरंभ नहीं कर सकते। हालाँकि, मैं आपके तरीके का उपयोग करके बॉट के उदाहरण को देख सकता हूं और एक dotfile देख सकता हूं। बॉट तब खुद को अपडेट करता है, डॉटफाइल को छूता है, और लॉन्चर द्वारा स्वचालित रूप से पुनरारंभ किया जाएगा। बहुत बढ़िया!
फ्रेड

@ मुझे यह सुनकर खुशी हुई :) मैं इस समाधान को एक मॉड्यूल में लागू करूंगा, जल्द ही मुझे लगता है, मेरे पास कुछ और विचार हैं कि इसकी कार्यक्षमता कैसे
बढ़ाई जाए

यदि फ़ाइल watchकी आवश्यकता नहीं है, तो fsअलग-अलग सिग्नल को सुनने के बिना , पुनः लोड किया जा सकता है ।
व्लादिमीर वुकानैक

18

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

npm install nodemon -g
cd whatever_dir_holds_my_app
nodemon app.js

8

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

npm install supervisor

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


2
यह क्रैश होने पर सर्वर को पुनरारंभ करने के बारे में अधिक है। नोड-पर्यवेक्षक भी पूरी प्रक्रिया को पुनरारंभ करता है जब देखी गई फाइलें बदल दी गई हों। यह सख्त अर्थों में हॉट-रीलोड नहीं है।
अपराह्न

यद्यपि वास्तव में हॉट-लोडिंग नहीं है, यह टूल वास्तव में उपयोगी है यदि आप कोड को केवल ऑटोरेलोड के लिए चाहते हैं जबकि आप विकसित कर रहे हैं ताकि आपको हर बदलाव के बाद कमांड लाइन में नोड को पुनरारंभ न करना पड़े।
डेरेक दाहर

7

संपादित करें: मेरा उत्तर अप्रचलित है। Node.js एक बहुत तेजी से बदलती तकनीक है।

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

require(url, reload)

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

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

कुछ इस तरह लिखें, और आपके पास ऑटो- लोड:

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

एकमात्र समस्या जो मुझे दिखाई दे रही है वह परिवर्तनशील है module, लेकिन मैं अभी इस पर काम कर रहा हूं।


7

nodemonबहुत अच्छा है। मैं सिर्फ डिबगिंग और देखने के विकल्पों के लिए अधिक पैरामीटर जोड़ता हूं।

package.json

  "scripts": {
    "dev": "cross-env NODE_ENV=development nodemon --watch server --inspect ./server/server.js"
  }

आदेश: nodemon --watch server --inspect ./server/server.js

जहाँ तक:

--watch serverजब बदलते ऐप को पुनः प्रारंभ .js, .mjs, .coffee, .litcoffee, और .jsonमें फ़ाइलों को serverफ़ोल्डर (शामिल सबफ़ोल्डर)।

--inspect दूरस्थ डीबग सक्षम करें।

./server/server.js प्रवेश बिंदु।

फिर launch.json(वी.एस. कोड) निम्नलिखित विन्यास जोड़ें और किसी भी समय डिबगिंग शुरू करें।

{
    "type": "node",
    "request": "attach",
    "name": "Attach",
    "protocol": "inspector",
    "port": 9229
}

ध्यान दें कि यह nodemonपरियोजना की देव निर्भरता के रूप में स्थापित करना बेहतर है । इसलिए आपकी टीम के सदस्यों को इसे स्थापित करने या कमांड के तर्कों को याद रखने की आवश्यकता नहीं है, वे बस npm run devऔर हैकिंग शुरू करते हैं।

nodemonडॉक्स पर अधिक देखें : https://github.com/remy/nodemon#monitoring-multiple-directories


हाल के संस्करणों के लिए ग्लोबिंग समर्थित नहीं है (1.19.0 कम से कम)। इसके बजाय बस nodemon --watch server --inspect ./server/server.js का उपयोग करें।
एलेक्स

धन्यवाद @Alex आपकी जानकारी के लिए। उत्तर अपडेट किया गया।
नौवें फाम

5

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


1
+1 हाँ। मैंने चर्चा में भाग लिया। मैंने स्वीकार किया कि मेरा समाधान बहुत सरल है। यह केवल तभी काम करता है जब गर्म मॉड्यूल को स्वयं आगे के मॉड्यूल की आवश्यकता नहीं होती है। फेलिक्स का समाधान अधिक सुविचारित है, लेकिन अगर ऑटो- कोर वास्तव में कोर से संबंधित है तो इस पर बहस होती है।
नागवार

5

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

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

forever -w start server.js

विस्मयकारी रूप से -w फ्लैग के साथ मेरे एक्सप्रेस.जेएस ऐप सीएसएस का उपयोग नहीं करता है।
कोस्टा

5

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

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

कमांड लाइन पर अपना ऐप शुरू करें:

node-dev app.js


3

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

ब्लॉग से:

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 को संशोधित करते हैं, तो उपरोक्त कोड नए अनुरोध के साथ स्थानीय अनुरोधहैंडलर को नोटिस करेगा और बदल देगा। कोई भी मौजूदा अनुरोध पुराने कोड का उपयोग करना जारी रखेगा, जबकि कोई भी नया आने वाला अनुरोध नए कोड का उपयोग करेगा। सर्वर को बंद किए बिना सभी, किसी भी अनुरोध को उछलते हुए, समय से पहले किसी भी अनुरोध को मारते हैं, या यहां तक ​​कि एक बुद्धिमान लोड बैलेंसर पर भरोसा करते हैं।


इस समाधान के साथ एकमात्र बात यह है कि यह नोड के पुराने संस्करण का एक कांटा है, इसलिए इसे उपयोग करने से पहले नवीनतम संस्करण के साथ ट्विक और मर्ज करना होगा (जब तक कि आप नोड के पुराने संस्करण का उपयोग करने से बुरा नहीं मानते)।
चेतन

3

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

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

    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"] मतलब है, लेकिन यह अपना काम कर रहा है। मेरा मानना ​​है कि नोड लोग किसी दिन पुनः लोड सुविधा को लागू करेंगे, इसलिए मुझे लगता है कि अभी के लिए यह समाधान स्वीकार्य है। (btw। मेरी "बात" यहाँ होगी: https://github.com/cheng81/wirez , वहाँ कुछ हफ़्ते में जाएँ और आपको देखना चाहिए कि मैं किस बारे में बात कर रहा हूँ)


.. बेशक वह सरल नहीं है। यही कारण है कि केवल तभी काम करता है वहाँ कॉल स्टैक में आवश्यकता के लिए एक कॉल। ओह ठीक है, एक हैक के शीर्ष पर आसान हैक: उस सामान को एक अस्थायी स्क्रिप्ट में लिखें, और रनटाइम में इसकी आवश्यकता होती है। क्या यह काम करता है..और यह कैश से भी खुद को साफ करता है
cheng81

और वास्तव में यह आसान था: हटाएं (आवश्यकता। कैश [मॉड्यूलफुल्थथएंडएक्स्ट])
चेंग at१

Node.js मॉड्यूल वास्तव में एक अनाम फ़ंक्शन में लिपटे होते हैं जो मॉड्यूल एनकैप्सुलेशन कैसे किया जाता है। प्रत्येक मॉड्यूल वास्तव में जैसा दिखता है function (module, require) { /* your code */ }। जब आप इसे ध्यान में रखते हैं, तो यह arguments[1]इंगित करता है require। और जब लूप ऐसी स्थितियों के लिए होता है, जहां आप इसे किसी अन्य फ़ंक्शन के भीतर एक मॉड्यूल से कॉल करते हैं (यह बस फ़ंक्शन पदानुक्रम तक जाता है और प्रत्येक को दिए गए तर्क मानों की जांच करता है)।
JK

3

आप एनपीएम से निकोडन का उपयोग कर सकते हैं । और यदि आप एक्सप्रेस जनरेटर का उपयोग कर रहे हैं तो आप अपने प्रोजेक्ट फ़ोल्डर के अंदर इस कमांड का उपयोग कर सकते हैं:

nodemon npm start

या डीबग मोड का उपयोग कर

DEBUG=yourapp:* nodemon npm start

आप सीधे भी चल सकते हैं

nodemon your-app-file.js

उममीद है कि इससे मदद मिलेगी।


1

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

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

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

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

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

इसके अलावा मुझे अपना नोड-इनफ्लो मॉड्यूल पसंद है।


1

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

शायद सबसे अच्छा एक है IntelliJ WebStorm, नोड के लिए हॉट रीलोड सुविधा (स्वचालित सर्वर और ब्राउज़र रीलोड) के साथ


1

यहाँ विंडोज में उपयोग के लिए एक कम तकनीक विधि है। इसे एक बैच फ़ाइल में रखें जिसे कहा जाता है serve.bat:

@echo off

:serve
start /wait node.exe %*
goto :serve

अब node app.jsअपने cmd शेल से चलने के बजाय , दौड़ेंserve app.js

यह सर्वर को चलाने वाली एक नई शेल विंडो खोलेगा। बैच फ़ाइल ब्लॉक हो जाएगी (के कारण/waitजब तक आप शेल विंडो बंद नहीं करेंगे, तब तक ), मूल cmd शेल किस बिंदु पर "टर्मिनेट बैच जॉब (Y / N)?" यदि आप "एन" का जवाब देते हैं, तो सर्वर को फिर से लॉन्च किया जाएगा।

हर बार जब आप सर्वर को पुनरारंभ करना चाहते हैं, तो सर्वर विंडो को बंद करें और cmd शेल में "N" का उत्तर दें।


1

मेरी एप्लिकेशन संरचना:

NodeAPP (folder)
   |-- app (folder)
      |-- all other file is here
   |-- node_modules (folder)
   |-- package.json
   |-- server.js (my server file)

पहले इस आदेश के साथ पुनः लोड स्थापित करें:

npm install [-g] [--save-dev] reload

तो परिवर्तन package.json :

"scripts": {
    "start": "nodemon -e css,ejs,js,json --watch app"
}

अब आपको अपनी सर्वर फ़ाइल में पुनः लोड का उपयोग करना होगा :

var express = require('express');
var reload = require('reload');
var app = express();

app.set('port', process.env.PORT || 3000);

var server = app.listen(app.get('port'), function() {
    console.log( 'server is running on port ' + app.get('port'));
});

reload(server, app);

और अंतिम परिवर्तन के लिए, आपकी प्रतिक्रिया का अंत इस स्क्रिप्ट को भेजें :

<script src="/reload/reload.js"></script>

अब इस कोड के साथ अपना ऐप शुरू करें:

npm start

यह तरीका काम नहीं करता है, हालांकि, जो लोग npmjs.com/package/reload (एक्सप्रेस ऐप्स के लिए) करते हैं।
मैक्सी बर्कमैन

0

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

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

और config स्वतः पुनः लोड हो जाएगा :)


एक ऐसा संस्करण मिला जो नोड के भाग का ढांचा पर निर्भर नहीं करता है?
एड्रियन

0

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

लौट सकते हैं

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

यह वह है callbackजिसे फ़ाइल बदलने पर कॉल किया जाएगा।

यह उन स्थितियों को संभालता है जहां फाइलें काफी बड़ी होती हैं, जो watchलिखने से पहले कहलाती हैं।

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

युद्ध का परीक्षण करने में मेरी मदद करो!

https://github.com/danschumann/loaddir


0

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

इंस्टॉल

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' }

0

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

पेशेवरों:

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

विपक्ष:

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

0

Vagrant और PHPStorm का उपयोग करने वाले लोगों के लिए, फ़ाइल पहरेदार एक तेज़ तरीका है

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

    योनि 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

0

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

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

Readme से:

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


0
const cleanCache = (moduleId) => {
    const module = require.cache[moduleId];
    if (!module) {
        return;
    }
    // 1. clean parent
    if (module.parent) {
        module.parent.children.splice(module.parent.children.indexOf(module), 1);
    }
    // 2. clean self
    require.cache[moduleId] = null;
};

0

आप इसे ब्राउज़र-रिफ्रेश के साथ कर सकते हैं । आपका नोड ऐप स्वचालित रूप से पुनरारंभ हो जाता है, ब्राउज़र में आपका परिणाम पृष्ठ भी स्वचालित रूप से ताज़ा हो जाता है। नकारात्मक पक्ष यह है कि आपको जेएस स्निपेट को उत्पन्न पृष्ठ पर रखना होगा। यहाँ काम कर रहे उदाहरण के लिए रेपो है

const http = require('http');
const hostname = 'localhost';
const port = 3000;

const server = http.createServer((req, res) => {
    res.statusCode = 200;
    res.setHeader('Content-Type', 'text/html; charset=UTF-8');
    res.write('Simple refresh!');
    res.write(`<script src=${process.env.BROWSER_REFRESH_URL}></script>`);
    res.end();
})

server.listen(port, hostname, () => {
    console.log(`Server running at http://${hostname}:${port}/`);

    if (process.send) {
        process.send({ event: 'online', url: `http://${hostname}:${port}/` })
    }

});

0

मैंने pm2 की कोशिश की है : स्थापना आसान है और उपयोग करना आसान है; परिणाम संतोषजनक है। हालाँकि, हमें इस बात का ध्यान रखना होगा कि pm2 के कौन से संस्करण को हम चाहते हैं। pm 2 रनटाइम मुफ्त संस्करण है, जबकि pm2 प्लस और pm2 उद्यम मुक्त नहीं हैं।

के रूप में Strongloop , मेरी स्थापना विफल या तो मैं इसका इस्तेमाल नहीं कर सकता है नहीं, पूरा हो गया।


-1

आजकल वेबपैक देव सर्वर का उपयोग गर्म विकल्प के साथ किया जाता है। आप अपने पैकेज में इस तरह से एक स्क्रिप्ट जोड़ सकते हैं। json:"hot": "cross-env NODE_ENV=development webpack-dev-server --hot --inline --watch-poll",

और आपकी फ़ाइलों में प्रत्येक परिवर्तन स्वचालित रूप से एक recompile ट्रिगर करेगा


2
यह उत्तर गलत प्रश्न है। वेबपैक फ्रंटएंड एप्लिकेशन के लिए है और देव सर्वर अपने आप में एक वेबसर्वर है। सवाल नोड में लागू एक सर्वर एप्लिकेशन का जिक्र था। इसके लिए वेबसर्वर की जरूरत नहीं है। यह पहले से ही एक है।
डैनियलखान
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.