2012-09-24 24 views
18

मैंने एक नोड मॉड्यूल बनाया है जो अनिवार्य रूप से केवल कुछ उपयोगी जेएस है जिसे क्लाइंट साइड भी इस्तेमाल किया जा सकता है। मुझे पता है कि require.js common.js घटकों को लोड कर सकता है, लेकिन मैं अनिवार्य रूप से एक जनादेश नहीं बनाना चाहता हूं कि मेरे मॉड्यूल क्लाइंट पक्ष का उपयोग करने वाले प्रत्येक व्यक्ति को भी आवश्यकता या सामान्य.जेएस या कुछ चाहिए। मैं उन्हें फ़ाइल के नीचे module.exports = ... को हटाने के लिए मजबूर नहीं करना चाहता हूं। दूसरों को इस समस्या को कैसे हल किया जाए? क्या आप सिर्फ 2 संस्करण, या 2 "संकलित" संस्करण बनाते हैं? क्या मॉड्यूल। निर्यात हर जगह काम करता है?module.exports क्लाइंट साइड

+2

इस विषय पर सबसे अच्छा प्रदर्शन मुझे पता है http://www.2ality.com/2011/11/module-gap.html। लेखक फायदे/नुकसान और विकास/तैनाती मोड पर चर्चा करता है। –

उत्तर

16

यह Underscore.js क्या करता है:

if (typeof exports !== 'undefined') { 
    if (typeof module !== 'undefined' && module.exports) { 
    exports = module.exports = _; 
    } 
    exports._ = _; 
} else { 
    root['_'] = _; 
} 
+0

आह हाँ यह अच्छा है! – Parris

+0

मुझे आश्चर्य है कि आप कोड के इस हिस्से का परीक्षण कैसे कर सकते हैं ताकि यह सफलतापूर्वक निर्यात किया जा सके। – Jun

4

यह मैं हूँ (CoffeeScript) के लिए काम किया है। मान लें 'नाम स्थान' क्या आप ग्राहक

(module ? {}).exports = @Namespace = 
    my: 'cool' 
    module: '!' 

तो फिर तुम ब्राउज़र में Node.js में require('namespace').my === 'cool' या Namespace.my === 'cool' उपयोग कर सकते हैं के लिए window गुंजाइश पर दावा करना चाहते है। इस रूप में

(typeof module !== "undefined" && module !== null ? module : {}).exports = this.Namespace = { 
    my: 'cool', 
    module: '!' 
}; 
1

जे एस में तब्दील हो मैं इस सरल लगता है:

try { 
    module.exports = exports = MyModule; 
} catch (e) {} 

इस फ़ाइल में दोनों ब्राउज़र और node.js. में शामिल किया जा सकता

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