Compare Revisions

Securable Modules

Revision 93399:

Revision 93399 by Petermichaux on

Revision 93400:

Revision 93400 by Petermichaux on

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

Revision 93399
Revision 93400
t42<code>// ========================================================t42<code>// ========================================================
>==========<br>// source code ------------------------------------>==========<br>// source code ------------------------------------
>------------------<br><br>//<br>// math.js<br>//<br>export.add = >------------------<br><br>//<br>// math.js<br>//<br>export.add = 
>function() {<br>  var sum = arguments[0];<br>  for (var i=1; i&lt>function() {<br>  var sum = arguments[0];<br>  for (var i=1; i&lt
>;arguments.length; i++) {<br>    sum += arguments[i];   }<br>  re>;arguments.length; i++) {<br>    sum += arguments[i];   }<br>  re
>turn sum;<br>};<br><br>//<br>// increment.js<br>//<br>var add = r>turn sum;<br>};<br><br>//<br>// increment.js<br>//<br>var add = r
>equire('math').add;<br>export.increment = function(val) {<br>  ad>equire('math').add;<br>export.increment = function(val) {<br>  ad
>d(val, 1);<br>};<br><br>//<br>// program.js<br>//<br>var inc = re>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>quire('increment').increment;<br>var a = 1;<br>inc(a); // 2<br><b
>r><br>// ========================================================>r><br>// ========================================================
>==========<br>// browser code in development<br><br>// locked int>==========<br>// browser code in development<br><br>// locked int
>o on of these options<br>//<br>//  1) using a special XHR synchro>o on of these options<br>//<br>//  1) using a special XHR synchro
>nous script loader and   //     less than ideal error messages wi>nous script loader and    //     less than ideal error messages w
>th strange line numbering<br>//<br>//  2) edit-compile-load-test >ith strange line numbering<br>//<br>//  2) edit-compile-load-test
>cycle using the code below. Also<br>//     strange numbering in e> cycle using the code below. Also<br>//     strange numbering in 
>rror messages that does not match<br>//     source files. Tools c>error messages that does not match<br>//     source files. Tools 
>ould make compile automatic but that<br>//     means tools are re>could make compile automatic but that<br>//     means tools are r
>quired and that is not the case in <br>//     the current browser>equired and that is not the case in <br>//     the current browse
> scripting world.<br><br><br>// =================================>r scripting world.<br><br><br>// ================================
>=================================<br>// compiled for production i>==================================<br>// compiled for production 
>n browser<br><br>//<br>// library.js<br>//<br>var require = (func>in browser<br><br>//<br>// library.js<br>//<br>var require = (fun
>tion() {<br>  <br>  // memoized export objects<br>  var exportObj>ction() {<br>  <br>  // memoized export objects<br>  var exportOb
>ects = {}<br><br>  // don't want outsider redefining "require" an>jects = {}<br><br>  // don't want outsider redefining "require" a
>d don't want<br>  // to use arguments.callee so name the function>nd don't want<br>  // to use arguments.callee so name the functio
> here.<br>  var require = function(name) {<br>    if (exportsObje>n here.<br>  var require = function(name) {<br>    if (exportsObj
>ct.hasOwnProperty(name)) {<br>      return exportsObject[name];<b>ect.hasOwnProperty(name)) {<br>      return exportsObject[name];<
>r>    }<br>    var exports = {};<br>    // memoize before executi>br>    }<br>    var exports = {};<br>    // memoize before execut
>ng module for cyclic dependencies<br>    exportsObject[name] = ex>ing module for cyclic dependencies<br>    exportsObject[name] = e
>ports;<br>    modules[name](require, exports);<br>    return expo>xports;<br>    modules[name](require, exports);<br>    return exp
>rts;<br>  };<br>  <br>  return require;<br>})();<br><br>var run =>orts;<br>  };<br>  <br>  return require;<br>})();<br><br>var run 
> function(name) {<br>  require(name); // doesn't return exports<b>= function(name) {<br>  require(name); // doesn't return exports<
>r>};<br><br>var modules = {};<br><br>//<br>// compiledModules.js<>br>};<br><br>var modules = {};<br><br>//<br>// compiledModules.js
>br>//<br>modules["math"] = function(require, exports) {<br>  expo><br>//<br>modules["math"] = function(require, exports) {<br>  exp
>rt.add = function() {<br>    var sum = arguments[0];<br>         >ort.add = function() {<br>    var sum = arguments[0];<br>        
> for (var i=1; i&lt;arguments.length; i++) {<br>           sum +=> for (var i=1; i&lt;arguments.length; i++) {<br>           sum +=
> arguments[i];<br>      }<br>   return sum;<br>  };<br>};<br><br>> arguments[i];<br>      }<br>   return sum;<br>  };<br>};<br><br>
>modules["increment"] = function(require, exports) {<br>  var add >modules["increment"] = function(require, exports) {<br>  var add 
>= require('math').add;<br>  export.increment = function(val) {<br>= require('math').add;<br>  export.increment = function(val) {<br
>>    add(val, 1);<br>  };<br>};<br><br>modules["program"] = funct>>    add(val, 1);<br>  };<br>};<br><br>modules["program"] = funct
>ion(require, exports) {<br>  var inc = requrie('increment').incre>ion(require, exports) {<br>  var inc = requrie('increment').incre
>ment;<br>  var a = 1;<br>  inc(a); // 2<br>};<br><br>//<br>// htm>ment;<br>  var a = 1;<br>  inc(a); // 2<br>};<br><br>//<br>// htm
>l in document head<br>//<br>&lt;script src="library.js" type="tex>l in document head<br>//<br>&lt;script src="library.js" type="tex
>t/javascript"&gt;&lt;/script&gt;<br>&lt;script src="compiledModul>t/javascript"&gt;&lt;/script&gt;<br>&lt;script src="compiledModul
>es.js" type="text/javascript"&gt;&lt;/script&gt;<br>&lt;script ty>es.js" type="text/javascript"&gt;&lt;/script&gt;<br>&lt;script ty
>pe="text/javascript"&gt;<br>  // You might not use use the window>pe="text/javascript"&gt;<br>  // You might not use use the window
>.onload property<br>  // but rather addEventListener/attachEvent.>.onload property<br>  // but rather addEventListener/attachEvent.
><br>  window.onload = function() {     run("program");   };<br>&l><br>  window.onload = function() {     run("program");   };<br>&l
>t;/script&gt;<br><br></code>>t;/script&gt;<br><br></code>

Back to History