let bundler resolve npm deps
This commit is contained in:
parent
93a9e5a2f8
commit
92d9e93ee1
1 changed files with 17 additions and 4 deletions
|
|
@ -12,14 +12,21 @@ function resolve(dir, data) {
|
||||||
usedVariables[variable] = usedVariables[variable] ? usedVariables[variable]++ : 1
|
usedVariables[variable] = usedVariables[variable] ? usedVariables[variable]++ : 1
|
||||||
|
|
||||||
var filename = new Function("return " + dep).call()
|
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 normalized = path.resolve(dir, filename)
|
||||||
var pathname = path.dirname(normalized)
|
var pathname = path.dirname(normalized)
|
||||||
if (modules[normalized] === undefined) {
|
if (modules[normalized] === undefined) {
|
||||||
modules[normalized] = variable
|
modules[normalized] = variable
|
||||||
var exported = fixCollisions(fs.readFileSync(dir + "/" + filename + ".js", "utf8"))
|
var exported = exportCode(dir + "/" + filename + ".js", def + variable + eq)
|
||||||
.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")
|
|
||||||
return resolve(pathname, exported)
|
return resolve(pathname, exported)
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
|
@ -40,6 +47,12 @@ function resolve(dir, data) {
|
||||||
.replace(/\}[\r\n]+\(/g, "}(") // remove space from iife
|
.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) {
|
function fixCollisions(code) {
|
||||||
for (var variable in usedVariables) {
|
for (var variable in usedVariables) {
|
||||||
var collision = new RegExp("\\b" + variable + "\\b(?![\"'`])", "g")
|
var collision = new RegExp("\\b" + variable + "\\b(?![\"'`])", "g")
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue