दिलचस्प पोस्ट
जावा सुरक्षा अपवाद: हस्ताक्षरकर्ता जानकारी मेल नहीं खाती मंद वी के रूप में स्ट्रिंग () और मंद v () स्ट्रिंग के रूप में क्या अंतर है? जावा में लूप के लिए बढ़ाए जाने के अंतिम पुनरावृत्ति iPhone ऐप्स: क्या मैं किसी वेबसाइट में एक लिंक से ऐप खोल सकता हूं? किसी इंटेंट का उपयोग करके गतिविधि से सेवा का डेटा पास करें बाहरी ".js" फ़ाइलों का उपयोग कैसे करें क्या एसक्यूएल सर्वर में एक डबल का प्रतिनिधित्व करता है? मैं PHP में एक क्रॉस डेटाबेस क्वेरी का निर्माण कैसे करूं? एक अन्य UIView के तहत एक UIView के साथ संपर्क की अनुमति प्रकार या नाम स्थान का नाम नहीं मिला मैं एचटीएमएल और पीएचपी के साथ कई फाइलों का चयन कैसे कर सकता हूं और अपलोड कर सकता हूं, जो कि एचटीटीपी पोस्ट का उपयोग कर रहा है मैं JFreeChart के आकार को कैसे बदलूं? एंड्रॉइड एमुलेटर कुंजीपटल इनपुट नहीं लेता – एसडीके टूल्स री 20 DbEntityValidationException – मैं आसानी से बता सकता हूं कि त्रुटि का कारण क्या है? गिट में सिर क्या है?

मैं Node.js और ब्राउज़र के बीच कोड कैसे साझा कर सकता हूं?

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

मैं क्लाइंट और सर्वर के बीच कोड साझा करना चाहूंगा मैं सिर्फ नोड के साथ शुरू किया है। जेएस और आधुनिक जावास्क्रिप्ट के बारे में मेरा ज्ञान थोड़ा कम है, कम से कम कहने के लिए। तो मैं अभी भी सामान्य जेएसएस () फ़ंक्शन के आसपास मेरे सिर को प्राप्त कर रहा हूं। अगर मैं 'निर्यात' ऑब्जेक्ट का उपयोग करके अपने पैकेज बना रहा हूं, तो मैं नहीं देख सकता कि मैं ब्राउज़र में एक ही जावास्क्रिप्ट फ़ाइलों का उपयोग कैसे कर सकता हूं।

मैं एन्कोडिंग और डिकोडिंग संदेशों की सुविधा के लिए दोनों सिरों पर उपयोग किए जाने वाले तरीकों और कक्षाओं का एक समूह बनाना चाहते हैं, और अन्य मिरर किए गए कार्य हालांकि, Node.js / CommonJS पैकेजिंग सिस्टम मुझे जावास्क्रिप्ट फ़ाइलों को बनाने से रोकते हैं जो दोनों पक्षों पर उपयोग किए जा सकते हैं

मैंने भी एक कठिन ओ ओ मॉडल प्राप्त करने के लिए JS.Class का उपयोग करने की कोशिश की, लेकिन मुझे छोड़ दिया क्योंकि मैं समझ नहीं पाया कि कैसे प्रदान की जाने वाली जावास्क्रिप्ट फ़ाइलों को प्राप्त करने के लिए आवश्यक है ()। क्या मुझे कुछ याद आ रही है?

वेब के समाधान से एकत्रित समाधान "मैं Node.js और ब्राउज़र के बीच कोड कैसे साझा कर सकता हूं?"

यदि आप एक मॉड्यूल लिखना चाहते हैं जिसे क्लाइंट साइड और सर्वर साइड दोनों का इस्तेमाल किया जा सकता है, तो मुझे एक त्वरित और आसान तरीके से एक छोटा ब्लॉग पोस्ट मिला है: Node.js और ब्राउज़र के लिए लेखन , अनिवार्य रूप से निम्नलिखित (जहां this वही है window ):

 (function(exports){ // Your code goes here exports.test = function(){ return 'hello world' }; })(typeof exports === 'undefined'? this['mymodule']={}: exports); 

वैकल्पिक रूप से क्लाइंट साइड पर नोड। जेएस एपीआई को कार्यान्वित करने के लिए कुछ परियोजनाएं हैं, जैसे कि मारक की गमिनी ।

आपको डैनोड में भी दिलचस्पी हो सकती है, जिससे आप एक जावास्क्रिप्ट फ़ंक्शन का पर्दाफाश कर सकते हैं ताकि इसे एक साधारण मशीन से सरल JSON- आधारित नेटवर्क प्रोटोकॉल का उपयोग कर कहा जा सके।

Epeli का एक अच्छा समाधान यहाँ है http://epeli.github.com/piler/ जो कि पुस्तकालय के बिना भी काम करता है, इसे केवल share.js नामक एक फ़ाइल में डाल दें

 (function(exports){ exports.test = function(){ return 'This is a function from shared module'; }; }(typeof exports === 'undefined' ? this.share = {} : exports)); 

सर्वर पक्ष पर बस का उपयोग करें:

 var share = require('./share.js'); share.test(); 

और ग्राहक पक्ष पर बस जेएस फ़ाइल लोड करें और फिर उपयोग करें

 share.test(); 

यह मत भूलो कि स्ट्रिंग एक जावास्क्रिप्ट समारोह का प्रतिनिधित्व उस समारोह के लिए स्रोत कोड का प्रतिनिधित्व करता है। आप अपने फ़ंक्शंस और कन्स्ट्रक्टर को एक समझाया तरीके से लिख सकते हैं ताकि वे स्ट्रिंग () 'डी' और क्लाइंट को भेजे जा सकें।

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

गेम के लिए मेरी बिल्ड सिस्टम एक साधारण बैश स्क्रिप्ट है जो सी प्रीप्रोसेसर के माध्यम से फाइल चलाती है और फिर सीएडी के माध्यम से कुछ जंक सीपीपी को पीछे छोड़ देती है, इसलिए मैं सभी सामान्य प्रीप्रोसेसर सामान जैसे #include, #define, #ifdef , आदि।

मैं Node.js के लिए RequireJS एडाप्टर में देखने की सलाह दूंगा । समस्या यह है कि आम जे एस मॉड्यूल पैटर्न Node.js डिफ़ॉल्ट रूप से उपयोग करता है अतुल्यकालिक नहीं है, जो वेब ब्राउज़र में लोड हो रहा है। RequireJS AMD पैटर्न का उपयोग करता है, जो दोनों अतुल्यकालिक और दोनों सर्वर और क्लाइंट के साथ संगत है, जब तक कि आप r.js एडेप्टर का उपयोग करते हैं।

JQuery के स्रोत कोड को चेक करें जो ब्राउज़र में नोड.जेएस मॉड्यूल पैटर्न, एएमडी मॉड्यूल पैटर्न, और वैश्विक में यह काम करता है:

 (function(window){ var jQuery = 'blah'; if (typeof module === "object" && module && typeof module.exports === "object") { // Expose jQuery as module.exports in loaders that implement the Node // module pattern (including browserify). Do not create the global, since // the user will be storing it themselves locally, and globals are frowned // upon in the Node module world. module.exports = jQuery; } else { // Otherwise expose jQuery to the global object as usual window.jQuery = window.$ = jQuery; // Register as a named AMD module, since jQuery can be concatenated with other // files that may use define, but not via a proper concatenation script that // understands anonymous AMD modules. A named AMD is safest and most robust // way to register. Lowercase jquery is used because AMD module names are // derived from file names, and jQuery is normally delivered in a lowercase // file name. Do this after creating the global so that if an AMD module wants // to call noConflict to hide this version of jQuery, it will work. if (typeof define === "function" && define.amd) { define("jquery", [], function () { return jQuery; }); } } })(this) 

शायद यह पूरी तरह से प्रश्न के अनुरूप नहीं है, लेकिन मैंने सोचा कि मैं इसे साझा करूँगा।

मैं String.prototype पर घोषित सरल स्ट्रिंग यूटिलिटी फ़ंक्शंस, दो नोड और ब्राउज़र दोनों के लिए उपलब्ध करना चाहता था। मैं इन फ़ंक्शन को एक फ़ाइल में utilities.js (एक सबफ़ोल्डर में) रखता हूं और अपने ब्राउजर कोड में स्क्रिप्ट-टैग से दोनों को आसानी से संदर्भित कर सकता हूं, और मेरे नोड.जेएस स्क्रिप्ट में (.js एक्सटेंशन को छोड़कर) की आवश्यकता का उपयोग करके :

my_node_script.js

 var utilities = require('./static/js/utilities') 

my_browser_code.html

 <script src="/static/js/utilities.js"></script> 

मुझे उम्मीद है कि यह मेरे अलावा अन्य किसी के लिए उपयोगी जानकारी है

सर्वर जावास्क्रिप्ट स्रोत फ़ाइलों को क्लाइंट (ब्राउज़र) को भेज सकता है लेकिन चाल यही है कि क्लाइंट को कोड को exec करने और उसे मॉड्यूल के रूप में संग्रहीत करने से पहले एक मिनी "निर्यात" पर्यावरण प्रदान करना होगा।

इस तरह के माहौल को बनाने का एक आसान तरीका बंद करना है। उदाहरण के लिए, कहें कि आपका सर्वर http://example.com/js/foo.js जैसे HTTP के माध्यम से स्रोत फाइल प्रदान करता है। ब्राउज़र आवश्यक फ़ाइलों को एक XMLHttpRequest के माध्यम से लोड कर सकता है और इस तरह कोड को लोड कर सकता है:

 ajaxRequest({ method: 'GET', url: 'http://example.com/js/foo.js', onSuccess: function(xhr) { var pre = '(function(){var exports={};' , post = ';return exports;})()'; window.fooModule = eval(pre + xhr.responseText + post); } }); 

मुख्य बात यह है कि ग्राहक विदेशी कोड को गुमनाम समारोह में तुरंत चलाया जा सकता है (एक समापन) जो "निर्यात" ऑब्जेक्ट बनाता है और रिटर्न करता है ताकि आप वैश्विक नेमस्पेस को प्रदूषित करने के बजाय इसे निर्दिष्ट कर सकें। इस उदाहरण में, यह विंडो विशेषता fooModule को असाइन किया गया है जिसमें फ़ाइल foo.js द्वारा निर्यात किए गए कोड शामिल foo.js

पिछले समाधानों में से कोई भी आम जेएस मॉड्यूल सिस्टम को ब्राउज़र में नहीं लाता है।

जैसा कि दूसरे उत्तर में बताया गया है, वहाँ परिसंपत्ति प्रबंधक / पैकेजर समाधान हैं जैसे कि ब्राउज़रप्रूफ या पिलर और आरपीसी समाधान जैसे डीएनोड या अब जेज

लेकिन मैं ब्राउज़र के लिए कॉमनजेएस के कार्यान्वयन को नहीं मिल सका (एक require() फ़ंक्शन और exports / module.exportsmodule.exports ऑब्जेक्ट, आदि)। इसलिए मैंने अपना लिखा, केवल बाद में पता चलता है कि किसी और ने इसे लिखा था, मेरे पास से बेहतर था: https://github.com/weepy/brequire इसे ब्रेक्वायर (ब्राउज़र की आवश्यकता के लिए संक्षिप्त) कहा जाता है।

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

2015 अद्यतन: मैं अब ब्रेक्वायर का उपयोग नहीं करता हूं (यह कुछ वर्षों में अपडेट नहीं किया गया है)। अगर मैं सिर्फ एक छोटे, खुले स्रोत मॉड्यूल लिख रहा हूं और मैं चाहता हूं कि कोई भी आसानी से उपयोग कर सके, तो मैं कैओलन के उत्तर (ऊपर) के समान एक पैटर्न का पालन करूंगा – मैंने इसके बारे में एक ब्लॉग पोस्ट दो साल लिखा था पहले।

हालांकि, अगर मैं निजी उपयोग के लिए मॉड्यूल लिख रहा हूं या एक ऐसे समुदाय के लिए जो आम जेएस (एम्पर्ससड सामुदायिक) पर मानकीकृत है, तो मैं उन्हें आम जेएस प्रारूप में लिखूंगा और ब्राउजरिफ़ का उपयोग करूँगा ।

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

यदि आप अपने ब्राउज़र को Node.js- जैसी शैली में लिखना चाहते हैं तो आप दोहरीकरण का प्रयास कर सकते हैं।

कोई ब्राउज़र कोड संकलन नहीं है, इसलिए आप अपने अनुप्रयोग को बिना सीमाओं के लिख सकते हैं।

अपने कोड को RequireJS मॉड्यूल और जैस्मीन परीक्षण के रूप में अपने परीक्षण के रूप में लिखें।

इस प्रकार कोड को हर तरफ RequireJS के साथ लोड किया जा सकता है और परीक्षण ब्राउज़र में चमेली-एचटीएमएल के साथ और नोड.जेएस में जैस्मीन नोड के साथ कोड या टेस्ट को संशोधित करने की आवश्यकता के बिना चलाया जा सकता है।

यहां इस के लिए एक काम उदाहरण है।

मैंने यह लिखा, यदि आप वैश्विक चरम पर सभी चर सेट करना चाहते हैं तो इसका उपयोग करना सरल है:

 (function(vars, global) { for (var i in vars) global[i] = vars[i]; })({ abc: function() { ... }, xyz: function() { ... } }, typeof exports === "undefined" ? this : exports);