Last active
December 2, 2018 19:43
-
-
Save kiontupper/4c02f5d065df20f86608617b7e7c5998 to your computer and use it in GitHub Desktop.
Poor man's derequire
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
#!/usr/bin/env node | |
let i = ""; | |
process.stdin.on("readable", () => { | |
let chunk; | |
while (null !== (chunk = process.stdin.read())) { | |
i += chunk.toString(); | |
} | |
}); | |
process.stdin.on("end", () => { | |
process.stderr.write("Recieved input file\n"); | |
// derequire stuff | |
i = i.split("require").join("_dereq_"); | |
process.stderr.write("Building blacklist...\n"); | |
let blacklist = new Set(); | |
// parse browserify output | |
let r1 = /\},\{(?:(?:".+":(?:\d+|undefined),?)+)\}\],\d+:\[function\(_dereq_,module,exports/g; | |
let a; | |
while (a = r1.exec(i)) { | |
let r2 = /"([^"]+)":undefined/g; | |
let b; | |
while (b = r2.exec(a[0])) { | |
blacklist.add(b[1]); | |
} | |
} | |
process.stderr.write("Reverting " + blacklist.size + " dependencies...\n"); | |
// revert unknown dependencies; hopefully webpack can find them | |
i = i.replace(new RegExp(`_dereq_(\\s*\\((['"])(?:${[...blacklist].join("|").split("/").join("\\/")})\\2\\s*\\))`, "g"), "require$1") | |
// allow bypassing browserify entirely | |
.split("global.nativeRequire").join("require"); | |
process.stderr.write("Finished transform\n"); | |
process.stdout.end(i); | |
}); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment