2013-03-17 10 views
16

के साथ ग्लोबल की आवश्यकता है, मैं अपनी फ़ाइलों को बंडल करने के लिए ब्राउज़रइफ़ी का उपयोग करना चाहता हूं, लेकिन फिर मुझे अपने ब्राउज़र के बंडल bundle.js के अंदर HTML पृष्ठ पर मॉड्यूल में से एक की आवश्यकता है। यह वर्तमान में संभव नहीं है क्योंकि पेज पर परिभाषित require फ़ंक्शन नहीं है।ब्राउजरिफ़ v2

ऐसा प्रतीत होता है कि requirebundle.js में ब्राउज़र द्वारा परिभाषित फ़ंक्शन आईआईएफई के अंदर है, इसलिए मैं इसका उपयोग नहीं कर सकता। क्या यह वैश्विक require के स्थान पर इसे फेंकना संभव है?

<script src="bundle.js"></script> 
<script> 
    // Require the `app` module inside of `bundle.js` 
    var app = require('app'); 
    app.start(); 
</script> 

मैं ऐसा करने की जरूरत मेरी app.start समारोह की आवश्यकता है, क्योंकि कुछ JSON यह जो केवल सर्वर साइड टेम्पलेट द्वारा रेंडर किया जा करने के लिए पारित कर दिया है।

एनबी। मैं ब्राउज़रify v2 का उपयोग कर रहा हूँ।

उत्तर

32

आप -rexpose a global require() कार्य करने के लिए फ़ाइलों के लिए उपयोग कर सकते हैं जो आपके द्वारा निर्दिष्ट:

x.js:

module.exports = function (n) { return n * 111 } 

कंसोल

$ browserify -r ./x.js > bundle.js 
फिर अपने html में

:

<script src="bundle.js"></script> 
<script> 
    var x = require('./x.js'); 
    console.log(x(3)) 
</script> 

333 प्रिंट करेगा।

अपने मामले में, browserify -r app को बाहरी संदर्भ में require('app') का पर्दाफाश करने के लिए करें।

+2

इसके लिए धन्यवाद। विचित्र रूप से यदि आप '।/X.js' के बजाय 'x.js' जैसे रिश्तेदार यूआरएल को पास करते हैं, तो यह' टाइप एरर: स्ट्रिंग या बफर नहीं ' –

+0

के साथ त्रुटियों को आपको बिल्कुल पारित करना होगा क्योंकि मॉड्यूल रिज़ॉल्यूशन होता है बंडल समय। V2 में क्लाइंट बंडलों में कोई मॉड्यूल समाधान एल्गोरिदम नहीं है। – substack

+0

मैं अंतर्निहित मॉड्यूल से ग्लोबल के लिए आवश्यक विधि को संलग्न करना चाहता हूं, जिससे मुझे encapsulation दिया जा सके। कुछ '' 'bundle.require ('./ x.js')' '' '' ''। मैंने अपनी मुख्य फाइल में एक मैनिफेस्ट बनाने की आवश्यकता है। क्या ऐसा करने के लिए इससे अच्छा तरीका है? –

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