mozilla

Compare Revisions

Securable Modules

Change Revisions

Revision 93397:

Revision 93397 by Kris.kowal on

Revision 93398:

Revision 93398 by Petermichaux on

Title:
Securable Modules
Securable Modules
Slug:
CommonJS/Modules/Securable_Modules
CommonJS/Modules/Securable_Modules
Content:

Revision 93397
Revision 93398
tt38    <h3>
39      Sample code
40    </h3>
41    <pre>
42<code>// ========================================================
 >==========<br>// source code ------------------------------------
 >------------------<br><br>//<br>// math.js<br>//<br>export.add = 
 >function() {<br>  var sum = arguments[0];<br>  for (var i=1; i&lt
 >;arguments.length; i++) {<br>    sum += arguments[i];   }<br>  re
 >turn sum;<br>};<br><br>//<br>// increment.js<br>//<br>var add = r
 >equire('math').add;<br>export.increment = function(val) {<br>  ad
 >d(val, 1);<br>};<br><br>//<br>// program.js<br>//<br>var inc = re
 >quire('increment').increment;<br>var a = 1;<br>inc(a); // 2<br><b
 >r><br>// ========================================================
 >==========<br>// browser code in development<br><br>// locked int
 >o on of these options<br>//<br>//  1) using a special XHR synchro
 >nous script loader and  //     less than ideal error messages wit
 >h strange line numbering<br>//<br>//  2) edit-compile-load-test c
 >ycle using the code below. Also<br>//     strange numbering in er
 >ror messages that does not match<br>//     source files. Tools co
 >uld make compile automatic but that<br>//     means tools are req
 >uired and that is not the case in <br>//     the current browser 
 >scripting world.<br><br><br>// ==================================
 >================================<br>// compiled for production in
 > browser<br><br>//<br>// library.js<br>//<br>var require = (funct
 >ion() {<br>  <br>  // memoized export objects<br>  var exportObje
 >cts = {}<br><br>  // don't want outsider redefining "require" and
 > don't want<br>  // to use arguments.callee so name the function 
 >here.<br>  var require = function(name) {<br>    if (exportsObjec
 >t.hasOwnProperty(name)) {<br>      return exportsObject[name];<br
 >>    }<br>    var exports = {};<br>    // memoize before executin
 >g module for cyclic dependencies<br>    exportsObject[name] = exp
 >orts;<br>    modules[name](require, exports);<br>    return expor
 >ts;<br>  };<br>  <br>  return require;<br>})();<br><br>var run = 
 >function(name) {<br>  require(name); // doesn't return exports<br
 >>};<br><br>var modules = {};<br><br>//<br>// compiledModules.js<b
 >r>//<br>modules["math"] = function(require, exports) {<br>  expor
 >t.add = function() {<br>    var sum = arguments[0];<br>   for (va
 >r i=1; i&lt;arguments.length; i++) {<br>           sum += argumen
 >ts[i];<br>      }<br>   return sum;<br>  };<br>};<br><br>modules[
 >"increment"] = function(require, exports) {<br>  var add = requir
 >e('math').add;<br>  export.increment = function(val) {<br>    add
 >(val, 1);<br>  };<br>};<br><br>modules["program"] = function(requ
 >ire, exports) {<br>  var inc = requrie('increment').increment;<br
 >>  var a = 1;<br>  inc(a); // 2<br>};<br><br>//<br>// html in doc
 >ument head<br>//<br>&lt;script src="library.js" type="text/javasc
 >ript"&gt;&lt;/script&gt;<br>&lt;script src="compiledModules.js" t
 >ype="text/javascript"&gt;&lt;/script&gt;<br>&lt;script type="text
 >/javascript"&gt;<br>  // You might not use use the window.onload 
 >property<br>  // but rather addEventListener/attachEvent.<br>  wi
 >ndow.onload = function() {     run("program");   };<br>&lt;/scrip
 >t&gt;<br><br></code>
43</pre>

Back to History