2012-03-19 9 views
8

मैं अपने वैश्विक नामस्थान को प्रदूषित किए बिना एक स्टैंडअलोन लाइब्रेरी के रूप में जावास्क्रिप्ट एपीआई का खुलासा करना चाहता हूं। मैंने रैपर बनाया है इसलिए मैं http://requirejs.org/docs/faq-advanced.html के अनुसार अपनी खुद की आवश्यकता जेएस प्रदूषित नहीं करता हूं। मैंने अभी तक जो कुछ भी किया है, उसे सरल बना दिया है, लेकिन मुझे यकीन नहीं है कि यह सही तरीका है या यदि मुझे इसे किसी अन्य तरीके से करना चाहिए।वैश्विक नामस्थान में आवश्यकता जेएस मॉड्यूल का पर्दाफाश करने का सही तरीका क्या है?

var MyApi = MyApi || {}; 
var MyApiRequireJS = (function() { 
    // require.js pasted here 
    return {requirejs: requirejs, require: require, define: define}; 
})(); 

(function(require, define, requirejs) { 
    require.config({ 
    baseUrl: 'js/scripts', 
    waitSeconds: 30, 
    }); 

    define('myapi', ['jquery', 'underscore'], 
    function($, _) { 
     $.noConflict(true); 
     _.noConflict(); 
     function api(method, args, callback) { 
     // do stuff here 
     } 
     return {api: api}; 
    } 
); 

    require(['myapi'], function(myapi) { 
    MyApi = myapi; 
    }); 
}(MyApiRequireJS.require, MyApiRequireJS.define, MyApiRequireJS.requirejs)); 

इस लाइब्रेरी का उपयोग कर एक स्क्रिप्ट टैग के ऊपर कोड का संदर्भ देते तो शामिल होंगे और साइटें, एपीआई का उपयोग कर

MyApi.api('some_remote_method', {foo: 'bar'}, function(result) { 
    // handle the result 
}); 
+0

आप कह रहे हैं आप 'नहीं करना चाहती require' और' define' ग्लोबल नेम स्पेस में हो सकता है, लेकिन आप 'MyApi' और' MyApiRequireJS' के लिए खुश ग्लोबल नेम स्पेस में होने की हो? क्या मैं 'पूछ सकता हूँ क्यों? –

+0

यह अधिक संभावना है कि वे पहले से ही उपयोग कर रहे हैं 'require' और' 'अपने वैश्विक नाम स्थान में MyApi' से define' है (' MyApi' वर मैं उपयोग करने के लिए जा रहा हूँ नहीं है, सिर्फ सादगी के लिए इस्तेमाल किया है।) इसी प्रकार फेसबुक कनेक्ट एपीआई केवल 'एफबी' के साथ वैश्विक नेमस्पेस को प्रदूषित करता है। –

+0

क्या वे 'आवश्यकता' या 'परिभाषित' का उपयोग कर रहे हैं? क्या तुम्हें ये पता लग सकता है? यदि नहीं, तो कोई समस्या नहीं है। यदि आप नहीं जानते कि उनका वैश्विक नामस्थान क्या उपयोग करता है, तो आप यह सुनिश्चित नहीं कर सकते कि आपके द्वारा परिभाषित किए गए किसी भी ग्लोबल्स पहले से ही उपयोग में नहीं होंगे। –

उत्तर

0

मुझे लगता है कि आप इसे अपने समस्या बनाकर किसी और की समस्या का अनुमान लगाने की कोशिश कर रहे हैं फोन लेकिन मुझे नहीं लगता कि आप वास्तव में ऐसा कर सकते हैं। जिस पृष्ठ से आप लिंक करते हैं, उन्हें उन लोगों को देने के लिए डिज़ाइन किया गया है जिनके पास पहले से ही "आवश्यकता" या "परिभाषित" नामक जावास्क्रिप्ट ग्लोबल्स हैं, जिन्हें कुछ अलग करने के लिए RequJS ग्लोबल्स का नाम बदलना है। यह दो अलग-अलग आवश्यकताजेएस उदाहरण बनाने का इरादा नहीं है जो स्वतंत्र रूप से निर्भरताओं को हल करते हैं। MyApi -

जिसके अनुसार, यदि आप वास्तव में नाम स्थान प्रदूषण कम करने के लिए कोशिश कर रहे हैं, तो आप वास्तव में एक ही नाम का खुलासा करना चाहिए। एक राक्षस बंद करें जिसमें RequJS के साथ-साथ आपके एपीआई कोड की आपकी निजी प्रति शामिल है, और इसे केवल उन तरीकों को वापस कर दें जिन्हें आप अपने एपीआई पर बेनकाब करना चाहते हैं।

यह शायद बहुत दोस्ताना/सरल दो संस्करणों, एक है कि एक requireJS मॉड्यूल को परिभाषित करता है, और एक नहीं requireJS निर्भरता है कि में अपनी API वितरित करने के लिए।

संबंधित मुद्दे