2013-01-25 16 views
7

क्षमा याचना पर निर्भर करता है अगर मैं डॉक्स में इस छूट गई है। असल में मैं RequJS मॉड्यूल कॉन्फ़िगरेशन सुविधा का उपयोग करना चाहता हूं। मैं एक पैकेज में मॉड्यूल को दिए गए कॉन्फ़िगरेशन मानों को केंद्रीय रूप से प्रबंधित करना चाहता हूं।RequireJS साथ मॉड्यूल का विन्यास जब config RequireJS

यह डॉक्स से एक उदाहरण है:

requirejs.config({ 
    config: { 
     'bar': { 
      size: 'large' 
     }, 
     'baz': { 
      color: 'blue' 
     } 
    } 
}); 

//bar.js, which uses simplified CJS wrapping: 
define(function (require, exports, module) { 
    //Will be the value 'large' 
    var size = module.config().size; 
}); 

//baz.js which uses a dependency array, 
define(['module'], function (module) { 
    //Will be the value 'blue' 
    var color = module.config().color; 
}); 

मेरे समस्या यह है कि मेरी विन्यास जानकारी एक छोटे से अधिक जटिल हो जाएगा, और खुद निर्भरता होगा। मैं करना चाहता हूं:

requirejs.config({ 
    config: { 
     'bar': { 
      path: path.dirname(module.uri) 
      key: crypto.randomBytes(64) 
     }, 
    } 
}); 

जहां मेरी कॉन्फ़िगरेशन में चर का मूल्यांकन करने के लिए आवश्यक जेएस का उपयोग करने की आवश्यकता है।

मेरे लिए यह वहाँ के लिए कोई मतलब RequireJS विन्यास के बीच एक तार्किक जुदाई होने के लिए होगा - मॉड्यूल लोड करने के लिए config आवश्यक - और उपयोगकर्ता की मॉड्यूल विन्यास। लेकिन मैं इस समय इस :(

उत्तर

0

करने के बाद यह थोड़ा और मैं के बारे में सोचा एक कामकाज के साथ आया है। यह विशेष रूप से सुंदर नहीं है लेकिन यह काम करता प्रतीत होता है।

मैं बस कर requireJS (...) दो बार, .. config, और दूसरा config के साथ आवेदन मॉड्यूल लोड करने के लिए बनाने के लिए

requireJSConfig = 
    baseUrl: __dirname 
    nodeRequire: require 

# Create the require function with basic config 
requireJS = require('requirejs').config(requireJSConfig) 
requireJS ['module', 'node.extend', 'crypto', 'path'], (module, extend, crypto, path) -> 
    # Application configuration 
    appConfig = 
     'bar': 
      path: path.dirname(module.uri) 
      key: crypto.randomBytes(64) # for doing cookie encryption 

    # get a new requireJS function with CONFIG data 
    requireJS = require('requirejs').config(extend(requireJSConfig, config: appConfig)) 
    requireJS ['bar'], (app) -> 
     ### 
      Load and start the server 
     ### 
     appServer = new app() 

     # And start the app on that interface (and port). 
     appServer.start() 

और bar.coffee में पहली

# bar.coffee 
define ['module'], (module) -> 
    # config is now available in this module 
    console.log(module.config().key) 
2

मुझे लगता है कि ऐसा करने के लिए उचित तरीके से एक config मॉड्यूल बनाने के लिए है लगता है ...

// config.js 
define(['module', 'path', 'crypto'], function(module, path, crypto) { 
    return { 
     path: path.dirname(module.uri) 
     key: crypto.randomBytes(64) 
    }; 
}); 

फिर अन्य मॉड्यूल में इसका इस्तेमाल संघर्ष कर रहा हूँ ...

// bar.js 
define(['config'], function (config) { 
    var key = config.key; 
}); 

फिर आप यह भी आप चाहें जटिल बना सकते हैं

संपादित करें: आप इस विशेष वर्ग के लिए वैश्विक नामस्थान को दूषित कर सकता है ...

define(['module', 'path', 'crypto'], function(module, path, crypto) { 
    window.config = { 
     path: path.dirname(module.uri) 
     key: crypto.randomBytes(64) 
    }; 
}); 

शीर्ष स्तर पर यह जोड़े कॉल की आवश्यकता होती है:

require(['config', 'main']); 

तो फिर तुम यह हमेशा में जोड़ने के बिना उपयोग कर सकते हैं अपने को परिभाषित:

// bar.js 
define([], function() { 
    var key = config.key; 
}); 
+0

हाँ thats क्या मैं वर्तमान में है, लेकिन यह मैं की आवश्यकता की जरूरत का मतलब है ' कॉन्फ़िगरेशन 'प्रत्येक मॉड्यूल से। इसका यह भी अर्थ है कि मैं केंद्रीकृत तरीके से विभिन्न मॉड्यूल के लिए अलग-अलग कॉन्फ़िगरेशन निर्दिष्ट नहीं कर सकता। मैं वास्तव में requJS कॉन्फ़िगरेशन सुविधा का उपयोग करने की उम्मीद कर रहा था, लेकिन शायद यह संभव नहीं है – greTech

+0

मेरा संपादन देखें, ग्लोबल्स उपयुक्त हैं यदि आप हर जगह कुछ उपयोग कर रहे हैं – Felix

+0

प्रदूषण ग्लोबल्स के लिए कोई धन्यवाद नहीं, मैं भी नोड.जेएस का उपयोग कर रहा हूं :) – greTech

6

इस तरह के समाधान के लिए, मैं मॉड्यूल को "कॉन्फ़िगर" मॉड्यूल पर निर्भर करता हूं जिसे आप पथ कॉन्फ़िगरेशन का उपयोग करके एक अलग के लिए स्वैप कर सकते हैं।

define(['barConfig'], function (config) { 
}); 

अपने अन्य निर्भरता तो barConfig.js हो सकता है:: फिर

define(['crypto'], function (crypto) { 
    return { 
     key: crypto.randomBytes(64) 
    } 
}); 

, यदि आप के लिए अलग अलग कॉन्फ़िगरेशन की जरूरत तो अगर "बार" कुछ config की जरूरत है, कैसा दिखेगा "bar.js" कहते हैं, उत्पादन बनाम।देव, रास्तों अन्य मूल्यों को barConfig मैप करने के लिए विन्यास का उपयोग करें:

requirejs.config({ 
    paths: { 
    barConfig: 'barConfig-prod' 
    } 
}); 
0

पर क्या @jrburke कह रहा है riffing, मैं निम्नलिखित पैटर्न पाया काफी उपयोगी होने के लिए: एक config मॉड्यूल को परिभाषित करने और यह बस से पहले main.js में निर्भरता है require.config() का आविष्कार।

main.js

define('config', ['crypto'], function (crypto) { 
    return { 
    'bar': { 
     key: crypto.randomBytes(64) 
    }, 
    }; 
}); 

requirejs.config({ 
    deps: ['app'], 
}); 

app.js

require(['config'], function (config){ 

    // outputs value of: crypto.bar.key 
    console.log(config.bar.key); 
}); 

Plnkr डेमो: http://plnkr.co/edit/I35bEgaazEAMD0u4cNuj

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