Created
April 6, 2011 13:27
-
-
Save thejh/905634 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
files = fs.readdirSync 'lib' | |
files = ({filename} for filename in files when filename.match(/\.js$/)) | |
resultstring = """ | |
var modules = {}; | |
function require(name) { | |
return modules[name]; | |
} | |
""" | |
wrap = (filename, code) -> | |
""" | |
(function () { | |
var module = { exports: {} }; | |
var exports = module.exports; | |
(function(module, exports) { | |
#{code} | |
})(module, exports); | |
modules['#{filename}'] = module.exports; | |
})(); | |
""" | |
allDependencies = {} | |
written = {} | |
writtenCount = 0 | |
for file in files | |
{filename} = file | |
jscode = fs.readFileSync 'lib/'+filename, 'utf-8' | |
file.code = jscode | |
dependencies = [] | |
jscode.replace /require\('\.\/([^']*)'\)/g, (fullmatch, required) -> | |
dependencies.push required = required + '.js' | |
console.log "#{filename} -> #{required}" | |
allDependencies[filename] = dependencies | |
allDependencies[filename].code = jscode | |
didntDoAnything = false | |
while writtenCount < files.length and not didntDoAnything | |
didntDoAnything = true | |
for filename, dependencies of allDependencies when not written[filename]? | |
canBeIncluded = do -> | |
for requiredFilename in dependencies when not written[requiredFilename]? | |
return false | |
true | |
if canBeIncluded | |
console.log "appending \"#{filename}\"..." | |
resultstring += '\n' + wrap filename, dependencies.code | |
written[filename] = true | |
writtenCount++ | |
didntDoAnything = false | |
if didntDoAnything | |
console.log "error: can't browserify cyclic dependencies" | |
else | |
fs.writeFileSync 'browserified.js', resultstring |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment