let bundler resolve npm deps

This commit is contained in:
Leo Horie 2016-06-20 23:08:43 -04:00
parent 93a9e5a2f8
commit 92d9e93ee1

View file

@ -12,14 +12,21 @@ function resolve(dir, data) {
usedVariables[variable] = usedVariables[variable] ? usedVariables[variable]++ : 1
var filename = new Function("return " + dep).call()
//resolve npm dependencies
if (filename[0] !== ".") {
var meta = JSON.parse(fs.readFileSync("./node_modules/" + filename + "/package.json"))
var dependencyEntry = "./node_modules/" + filename + "/" + (meta.main || filename + ".js")
try {fs.statSync(dependencyEntry).isFile()} catch (e) {dependencyEntry = "./node_modules/" + filename + "/index.js"}
return resolve(path.dirname(dependencyEntry), exportCode(dependencyEntry, def + variable + eq))
}
//resolve local dependencies
var normalized = path.resolve(dir, filename)
var pathname = path.dirname(normalized)
if (modules[normalized] === undefined) {
modules[normalized] = variable
var exported = fixCollisions(fs.readFileSync(dir + "/" + filename + ".js", "utf8"))
.replace(/"use strict"\s*/gm, "") // remove extraneous "use strict"
.replace(/module\.exports\s*=\s*/gm, def + variable + eq)
//.replace(/module\.exports(\.[\w_$]|\["[^\"]"\])/, def + variable + eq + "{}\n" + variable + "$1")
var exported = exportCode(dir + "/" + filename + ".js", def + variable + eq)
return resolve(pathname, exported)
}
else {
@ -40,6 +47,12 @@ function resolve(dir, data) {
.replace(/\}[\r\n]+\(/g, "}(") // remove space from iife
}
function exportCode(file, assigment) {
return fixCollisions(fs.readFileSync(file, "utf8"))
.replace(/("|')use strict\1;?\s*/gm, "") // remove extraneous "use strict"
.replace(/module\.exports\s*=\s*/gm, assigment)
}
function fixCollisions(code) {
for (var variable in usedVariables) {
var collision = new RegExp("\\b" + variable + "\\b(?![\"'`])", "g")