Skip to content

Instantly share code, notes, and snippets.

@markruys
Forked from kwhinnery/Person.js
Created March 8, 2012 21:59
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save markruys/2003719 to your computer and use it in GitHub Desktop.
Save markruys/2003719 to your computer and use it in GitHub Desktop.
Monkey patch for require in Titanium Mobile
/*
add a monkey-patched "require" function to the global scope (global object).
It is smarter in two ways:
- It only loads a module once
- If the exports object contains a function matching the module base name, return that
value from "require" - this is a bit of sugar added because Titanium's require implementation
does not allow you to replace the "exports" object directly
*/
//monkey patch "require" in the global scope
require('require_patch').monkeypatch(this);
//regular modules are the same...
var module = require('module');
module.sayHello('Marshall');
module.sayGoodbye('Kevin');
//modules which contain a type by the same name as the module...
var Person = require('Person');
var jedi = new Person('Luke','Skywalker');
exports.sayHello = function(name) {
alert('Hello '+name+'!');
};
exports.sayGoodbye = function(name) {
alert('Goodbye '+name+'!');
};
exports.Person = function(firstName,lastName) {
this.firstName = firstName;
this.lastName = lastName;
};
exports.monkeypatch = function(object) {
var scriptRegistry = {},
old_require = object.require;
object.require = function(moduleName) {
if (!scriptRegistry[moduleName]) {
var mod = old_require(moduleName),
moduleRoot = moduleName.split(/[\/ ]+/).pop();
if (typeof(mod[moduleRoot]) === 'function') {
scriptRegistry[moduleName] = mod[moduleRoot];
}
else {
scriptRegistry[moduleName] = mod;
}
}
return scriptRegistry[moduleName];
};
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment