Simplify bundler a little (#2290)

- Remove a useless abstraction
- Remove a useless write + read
- Only read when generating the bundle
- Use one watcher instead of two
- Use Chokidar to simplify and make for a better experience
This commit is contained in:
Isiah Meadows 2018-11-27 18:02:35 -05:00 committed by GitHub
parent a96caf25c5
commit c33621cd52
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
6 changed files with 1727 additions and 149 deletions

View file

@ -16,7 +16,7 @@ function parse(file) {
} }
var error var error
function run(input, output) { module.exports = function (input) {
var modules = {} var modules = {}
var bindings = {} var bindings = {}
var declaration = /^\s*(?:var|let|const|function)[\t ]+([\w_$]+)/gm var declaration = /^\s*(?:var|let|const|function)[\t ]+([\w_$]+)/gm
@ -115,19 +115,7 @@ function run(input, output) {
.replace(versionTag, isFile(packageFile) ? parse(packageFile).version : versionTag) // set version .replace(versionTag, isFile(packageFile) ? parse(packageFile).version : versionTag) // set version
code = ";(function() {\n" + code + "\n}());" code = ";(function() {\n" + code + "\n}());"
//try {new Function(code); console.log("build completed at " + new Date())} catch (e) {}
if (!isFile(output) || code !== read(output)) { error = null
//try {new Function(code); console.log("build completed at " + new Date())} catch (e) {} return code
error = null
fs.writeFileSync(output, code, "utf8")
}
}
module.exports = function(input, output, options) {
run(input, output)
if (options && options.watch) {
fs.watch(process.cwd(), {recursive: true}, function(file) {
if (typeof file === "string" && path.resolve(output) !== path.resolve(file)) run(input, output)
})
}
} }

View file

@ -1,10 +1,12 @@
"use strict" "use strict"
var fs = require("fs"); var fs = require("fs")
var path = require("path")
var zlib = require("zlib") var zlib = require("zlib")
var chokidar = require("chokidar")
var Terser = require("terser")
var bundle = require("./bundle") var bundle = require("./bundle")
var minify = require("./minify")
var aliases = {o: "output", m: "minify", w: "watch", s: "save"} var aliases = {o: "output", m: "minify", w: "watch", s: "save"}
var params = {} var params = {}
@ -29,14 +31,20 @@ function format(n) {
return n.toString().replace(/(\d)(?=(\d\d\d)+(?!\d))/g, "$1,") return n.toString().replace(/(\d)(?=(\d\d\d)+(?!\d))/g, "$1,")
} }
bundle(params.input, params.output, {watch: params.watch}) function build() {
if (params.minify) { var original = bundle(params.input)
// mFiles = { original: String(mithril.js), compressed: String(mithril.min.js) } if (!params.minify) {
var mFiles = minify(params.output, {watch: params.watch}) fs.writeFileSync(params.output, original, "utf-8")
var originalSize = mFiles.original.length return
var compressedSize = mFiles.compressed.length }
var originalGzipSize = zlib.gzipSync(mFiles.original).byteLength console.log("minifying...")
var compressedGzipSize = zlib.gzipSync(mFiles.compressed).byteLength var minified = Terser.minify(original)
if (minified.error) throw new Error(minified.error)
fs.writeFileSync(params.output, minified.code, "utf-8")
var originalSize = original.length
var compressedSize = minified.code.length
var originalGzipSize = zlib.gzipSync(original).byteLength
var compressedGzipSize = zlib.gzipSync(minified.code).byteLength
console.log("Original size: " + format(originalGzipSize) + " bytes gzipped (" + format(originalSize) + " bytes uncompressed)") console.log("Original size: " + format(originalGzipSize) + " bytes gzipped (" + format(originalSize) + " bytes uncompressed)")
console.log("Compiled size: " + format(compressedGzipSize) + " bytes gzipped (" + format(compressedSize) + " bytes uncompressed)") console.log("Compiled size: " + format(compressedGzipSize) + " bytes gzipped (" + format(compressedSize) + " bytes uncompressed)")
@ -53,3 +61,6 @@ if (params.minify) {
) )
} }
} }
build()
if (params.watch) chokidar.watch(".", {ignored: params.output}).on("all", build)

View file

@ -1,26 +0,0 @@
"use strict"
var fs = require("fs")
var Terser = require("terser")
module.exports = function(filePath, options) {
function minify(filePath) {
var original = fs.readFileSync(filePath, "utf8"),
uglified = Terser.minify(original),
compressed = uglified.code
if (uglified.error) throw new Error(uglified.error)
fs.writeFileSync(filePath, compressed, "utf8")
return {original: original, compressed: compressed}
}
function run() {
console.log("minifying...")
return minify(filePath)
}
if (options && options.watch) fs.watchFile(filePath, run)
return run()
}

View file

@ -22,266 +22,221 @@ o.spec("bundler", function() {
o("relative imports works", function() { o("relative imports works", function() {
write("a.js", 'var b = require("./b")') write("a.js", 'var b = require("./b")')
write("b.js", "module.exports = 1") write("b.js", "module.exports = 1")
bundle(ns + "a.js", ns + "out.js")
o(read("out.js")).equals(";(function() {\nvar b = 1\n}());") o(bundle(ns + "a.js")).equals(";(function() {\nvar b = 1\n}());")
remove("a.js") remove("a.js")
remove("b.js") remove("b.js")
remove("out.js")
}) })
o("relative imports works with semicolons", function() { o("relative imports works with semicolons", function() {
write("a.js", 'var b = require("./b");') write("a.js", 'var b = require("./b");')
write("b.js", "module.exports = 1;") write("b.js", "module.exports = 1;")
bundle(ns + "a.js", ns + "out.js")
o(read("out.js")).equals(";(function() {\nvar b = 1;\n}());") o(bundle(ns + "a.js")).equals(";(function() {\nvar b = 1;\n}());")
remove("a.js") remove("a.js")
remove("b.js") remove("b.js")
remove("out.js")
}) })
o("relative imports works with let", function() { o("relative imports works with let", function() {
write("a.js", 'let b = require("./b")') write("a.js", 'let b = require("./b")')
write("b.js", "module.exports = 1") write("b.js", "module.exports = 1")
bundle(ns + "a.js", ns + "out.js")
o(read("out.js")).equals(";(function() {\nlet b = 1\n}());") o(bundle(ns + "a.js")).equals(";(function() {\nlet b = 1\n}());")
remove("a.js") remove("a.js")
remove("b.js") remove("b.js")
remove("out.js")
}) })
o("relative imports works with const", function() { o("relative imports works with const", function() {
write("a.js", 'const b = require("./b")') write("a.js", 'const b = require("./b")')
write("b.js", "module.exports = 1") write("b.js", "module.exports = 1")
bundle(ns + "a.js", ns + "out.js")
o(read("out.js")).equals(";(function() {\nconst b = 1\n}());") o(bundle(ns + "a.js")).equals(";(function() {\nconst b = 1\n}());")
remove("a.js") remove("a.js")
remove("b.js") remove("b.js")
remove("out.js")
}) })
o("relative imports works with assignment", function() { o("relative imports works with assignment", function() {
write("a.js", 'var a = {}\na.b = require("./b")') write("a.js", 'var a = {}\na.b = require("./b")')
write("b.js", "module.exports = 1") write("b.js", "module.exports = 1")
bundle(ns + "a.js", ns + "out.js")
o(read("out.js")).equals(";(function() {\nvar a = {}\na.b = 1\n}());") o(bundle(ns + "a.js")).equals(";(function() {\nvar a = {}\na.b = 1\n}());")
remove("a.js") remove("a.js")
remove("b.js") remove("b.js")
remove("out.js")
}) })
o("relative imports works with reassignment", function() { o("relative imports works with reassignment", function() {
write("a.js", 'var b = {}\nb = require("./b")') write("a.js", 'var b = {}\nb = require("./b")')
write("b.js", "module.exports = 1") write("b.js", "module.exports = 1")
bundle(ns + "a.js", ns + "out.js")
o(read("out.js")).equals(";(function() {\nvar b = {}\nb = 1\n}());") o(bundle(ns + "a.js")).equals(";(function() {\nvar b = {}\nb = 1\n}());")
remove("a.js") remove("a.js")
remove("b.js") remove("b.js")
remove("out.js")
}) })
o("relative imports removes extra use strict", function() { o("relative imports removes extra use strict", function() {
write("a.js", '"use strict"\nvar b = require("./b")') write("a.js", '"use strict"\nvar b = require("./b")')
write("b.js", '"use strict"\nmodule.exports = 1') write("b.js", '"use strict"\nmodule.exports = 1')
bundle(ns + "a.js", ns + "out.js")
o(read("out.js")).equals(';(function() {\n"use strict"\nvar b = 1\n}());') o(bundle(ns + "a.js")).equals(';(function() {\n"use strict"\nvar b = 1\n}());')
remove("a.js") remove("a.js")
remove("b.js") remove("b.js")
remove("out.js")
}) })
o("relative imports removes extra use strict using single quotes", function() { o("relative imports removes extra use strict using single quotes", function() {
write("a.js", "'use strict'\nvar b = require(\"./b\")") write("a.js", "'use strict'\nvar b = require(\"./b\")")
write("b.js", "'use strict'\nmodule.exports = 1") write("b.js", "'use strict'\nmodule.exports = 1")
bundle(ns + "a.js", ns + "out.js")
o(read("out.js")).equals(";(function() {\n'use strict'\nvar b = 1\n}());") o(bundle(ns + "a.js")).equals(";(function() {\n'use strict'\nvar b = 1\n}());")
remove("a.js") remove("a.js")
remove("b.js") remove("b.js")
remove("out.js")
}) })
o("relative imports removes extra use strict using mixed quotes", function() { o("relative imports removes extra use strict using mixed quotes", function() {
write("a.js", '"use strict"\nvar b = require("./b")') write("a.js", '"use strict"\nvar b = require("./b")')
write("b.js", "'use strict'\nmodule.exports = 1") write("b.js", "'use strict'\nmodule.exports = 1")
bundle(ns + "a.js", ns + "out.js")
o(read("out.js")).equals(';(function() {\n"use strict"\nvar b = 1\n}());') o(bundle(ns + "a.js")).equals(';(function() {\n"use strict"\nvar b = 1\n}());')
remove("a.js") remove("a.js")
remove("b.js") remove("b.js")
remove("out.js")
}) })
o("works w/ window", function() { o("works w/ window", function() {
write("a.js", 'window.a = 1\nvar b = require("./b")') write("a.js", 'window.a = 1\nvar b = require("./b")')
write("b.js", "module.exports = function() {return a}") write("b.js", "module.exports = function() {return a}")
bundle(ns + "a.js", ns + "out.js")
o(read("out.js")).equals(";(function() {\nwindow.a = 1\nvar b = function() {return a}\n}());") o(bundle(ns + "a.js")).equals(";(function() {\nwindow.a = 1\nvar b = function() {return a}\n}());")
remove("a.js") remove("a.js")
remove("b.js") remove("b.js")
remove("out.js")
}) })
o("works without assignment", function() { o("works without assignment", function() {
write("a.js", 'require("./b")') write("a.js", 'require("./b")')
write("b.js", "1 + 1") write("b.js", "1 + 1")
bundle(ns + "a.js", ns + "out.js")
o(read("out.js")).equals(";(function() {\n1 + 1\n}());") o(bundle(ns + "a.js")).equals(";(function() {\n1 + 1\n}());")
remove("a.js") remove("a.js")
remove("b.js") remove("b.js")
remove("out.js")
}) })
o("works if used fluently", function() { o("works if used fluently", function() {
write("a.js", 'var b = require("./b").toString()') write("a.js", 'var b = require("./b").toString()')
write("b.js", "module.exports = []") write("b.js", "module.exports = []")
bundle(ns + "a.js", ns + "out.js")
o(read("out.js")).equals(";(function() {\nvar _0 = []\nvar b = _0.toString()\n}());") o(bundle(ns + "a.js")).equals(";(function() {\nvar _0 = []\nvar b = _0.toString()\n}());")
remove("a.js") remove("a.js")
remove("b.js") remove("b.js")
remove("out.js")
}) })
o("works if used fluently w/ multiline", function() { o("works if used fluently w/ multiline", function() {
write("a.js", 'var b = require("./b")\n\t.toString()') write("a.js", 'var b = require("./b")\n\t.toString()')
write("b.js", "module.exports = []") write("b.js", "module.exports = []")
bundle(ns + "a.js", ns + "out.js")
o(read("out.js")).equals(";(function() {\nvar _0 = []\nvar b = _0\n\t.toString()\n}());") o(bundle(ns + "a.js")).equals(";(function() {\nvar _0 = []\nvar b = _0\n\t.toString()\n}());")
remove("a.js") remove("a.js")
remove("b.js") remove("b.js")
remove("out.js")
}) })
o("works if used w/ curry", function() { o("works if used w/ curry", function() {
write("a.js", 'var b = require("./b")()') write("a.js", 'var b = require("./b")()')
write("b.js", "module.exports = function() {}") write("b.js", "module.exports = function() {}")
bundle(ns + "a.js", ns + "out.js")
o(read("out.js")).equals(";(function() {\nvar _0 = function() {}\nvar b = _0()\n}());") o(bundle(ns + "a.js")).equals(";(function() {\nvar _0 = function() {}\nvar b = _0()\n}());")
remove("a.js") remove("a.js")
remove("b.js") remove("b.js")
remove("out.js")
}) })
o("works if used w/ curry w/ multiline", function() { o("works if used w/ curry w/ multiline", function() {
write("a.js", 'var b = require("./b")\n()') write("a.js", 'var b = require("./b")\n()')
write("b.js", "module.exports = function() {}") write("b.js", "module.exports = function() {}")
bundle(ns + "a.js", ns + "out.js")
o(read("out.js")).equals(";(function() {\nvar _0 = function() {}\nvar b = _0\n()\n}());") o(bundle(ns + "a.js")).equals(";(function() {\nvar _0 = function() {}\nvar b = _0\n()\n}());")
remove("a.js") remove("a.js")
remove("b.js") remove("b.js")
remove("out.js")
}) })
o("works if used fluently in one place and not in another", function() { o("works if used fluently in one place and not in another", function() {
write("a.js", 'var b = require("./b").toString()\nvar c = require("./c")') write("a.js", 'var b = require("./b").toString()\nvar c = require("./c")')
write("b.js", "module.exports = []") write("b.js", "module.exports = []")
write("c.js", 'var b = require("./b")\nmodule.exports = function() {return b}') write("c.js", 'var b = require("./b")\nmodule.exports = function() {return b}')
bundle(ns + "a.js", ns + "out.js")
o(read("out.js")).equals(";(function() {\nvar _0 = []\nvar b = _0.toString()\nvar b0 = _0\nvar c = function() {return b0}\n}());") o(bundle(ns + "a.js")).equals(";(function() {\nvar _0 = []\nvar b = _0.toString()\nvar b0 = _0\nvar c = function() {return b0}\n}());")
remove("a.js") remove("a.js")
remove("b.js") remove("b.js")
remove("c.js") remove("c.js")
remove("out.js")
}) })
o("works if used in sequence", function() { o("works if used in sequence", function() {
write("a.js", 'var b = require("./b"), c = require("./c")') write("a.js", 'var b = require("./b"), c = require("./c")')
write("b.js", "module.exports = 1") write("b.js", "module.exports = 1")
write("c.js", "var x\nmodule.exports = 2") write("c.js", "var x\nmodule.exports = 2")
bundle(ns + "a.js", ns + "out.js")
o(read("out.js")).equals(";(function() {\nvar b = 1\nvar x\nvar c = 2\n}());") o(bundle(ns + "a.js")).equals(";(function() {\nvar b = 1\nvar x\nvar c = 2\n}());")
remove("a.js") remove("a.js")
remove("b.js") remove("b.js")
remove("c.js") remove("c.js")
remove("out.js")
}) })
o("works if assigned to property", function() { o("works if assigned to property", function() {
write("a.js", 'var x = {}\nx.b = require("./b")\nx.c = require("./c")') write("a.js", 'var x = {}\nx.b = require("./b")\nx.c = require("./c")')
write("b.js", "var bb = 1\nmodule.exports = bb") write("b.js", "var bb = 1\nmodule.exports = bb")
write("c.js", "var cc = 2\nmodule.exports = cc") write("c.js", "var cc = 2\nmodule.exports = cc")
bundle(ns + "a.js", ns + "out.js")
o(read("out.js")).equals(";(function() {\nvar x = {}\nvar bb = 1\nx.b = bb\nvar cc = 2\nx.c = cc\n}());") o(bundle(ns + "a.js")).equals(";(function() {\nvar x = {}\nvar bb = 1\nx.b = bb\nvar cc = 2\nx.c = cc\n}());")
remove("a.js") remove("a.js")
remove("b.js") remove("b.js")
remove("c.js") remove("c.js")
remove("out.js")
}) })
o("works if assigned to property using bracket notation", function() { o("works if assigned to property using bracket notation", function() {
write("a.js", 'var x = {}\nx["b"] = require("./b")\nx["c"] = require("./c")') write("a.js", 'var x = {}\nx["b"] = require("./b")\nx["c"] = require("./c")')
write("b.js", "var bb = 1\nmodule.exports = bb") write("b.js", "var bb = 1\nmodule.exports = bb")
write("c.js", "var cc = 2\nmodule.exports = cc") write("c.js", "var cc = 2\nmodule.exports = cc")
bundle(ns + "a.js", ns + "out.js")
o(read("out.js")).equals(';(function() {\nvar x = {}\nvar bb = 1\nx["b"] = bb\nvar cc = 2\nx["c"] = cc\n}());') o(bundle(ns + "a.js")).equals(';(function() {\nvar x = {}\nvar bb = 1\nx["b"] = bb\nvar cc = 2\nx["c"] = cc\n}());')
remove("a.js") remove("a.js")
remove("b.js") remove("b.js")
remove("c.js") remove("c.js")
remove("out.js")
}) })
o("works if collision", function() { o("works if collision", function() {
write("a.js", 'var b = require("./b")') write("a.js", 'var b = require("./b")')
write("b.js", "var b = 1\nmodule.exports = 2") write("b.js", "var b = 1\nmodule.exports = 2")
bundle(ns + "a.js", ns + "out.js")
o(read("out.js")).equals(";(function() {\nvar b0 = 1\nvar b = 2\n}());") o(bundle(ns + "a.js")).equals(";(function() {\nvar b0 = 1\nvar b = 2\n}());")
remove("a.js") remove("a.js")
remove("b.js") remove("b.js")
remove("out.js")
}) })
o("works if multiple aliases", function() { o("works if multiple aliases", function() {
write("a.js", 'var b = require("./b")\n') write("a.js", 'var b = require("./b")\n')
write("b.js", 'var b = require("./c")\nb.x = 1\nmodule.exports = b') write("b.js", 'var b = require("./c")\nb.x = 1\nmodule.exports = b')
write("c.js", "var b = {}\nmodule.exports = b") write("c.js", "var b = {}\nmodule.exports = b")
bundle(ns + "a.js", ns + "out.js")
o(read("out.js")).equals(";(function() {\nvar b = {}\nb.x = 1\n}());") o(bundle(ns + "a.js")).equals(";(function() {\nvar b = {}\nb.x = 1\n}());")
remove("a.js") remove("a.js")
remove("b.js") remove("b.js")
remove("c.js") remove("c.js")
remove("out.js")
}) })
o("works if multiple collision", function() { o("works if multiple collision", function() {
write("a.js", 'var b = require("./b")\nvar c = require("./c")\nvar d = require("./d")') write("a.js", 'var b = require("./b")\nvar c = require("./c")\nvar d = require("./d")')
write("b.js", "var a = 1\nmodule.exports = a") write("b.js", "var a = 1\nmodule.exports = a")
write("c.js", "var a = 2\nmodule.exports = a") write("c.js", "var a = 2\nmodule.exports = a")
write("d.js", "var a = 3\nmodule.exports = a") write("d.js", "var a = 3\nmodule.exports = a")
bundle(ns + "a.js", ns + "out.js")
o(read("out.js")).equals(";(function() {\nvar a = 1\nvar b = a\nvar a0 = 2\nvar c = a0\nvar a1 = 3\nvar d = a1\n}());") o(bundle(ns + "a.js")).equals(";(function() {\nvar a = 1\nvar b = a\nvar a0 = 2\nvar c = a0\nvar a1 = 3\nvar d = a1\n}());")
remove("a.js") remove("a.js")
remove("b.js") remove("b.js")
remove("c.js") remove("c.js")
remove("d.js") remove("d.js")
remove("out.js")
}) })
o("works if included multiple times", function() { o("works if included multiple times", function() {
write("a.js", "module.exports = 123") write("a.js", "module.exports = 123")
write("b.js", 'var a = require("./a").toString()\nmodule.exports = a') write("b.js", 'var a = require("./a").toString()\nmodule.exports = a')
write("c.js", 'var a = require("./a").toString()\nvar b = require("./b")') write("c.js", 'var a = require("./a").toString()\nvar b = require("./b")')
bundle(ns + "c.js", ns + "out.js")
o(read("out.js")).equals(";(function() {\nvar _0 = 123\nvar a = _0.toString()\nvar a0 = _0.toString()\nvar b = a0\n}());") o(bundle(ns + "c.js")).equals(";(function() {\nvar _0 = 123\nvar a = _0.toString()\nvar a0 = _0.toString()\nvar b = a0\n}());")
remove("a.js") remove("a.js")
remove("b.js") remove("b.js")
@ -291,9 +246,8 @@ o.spec("bundler", function() {
write("a.js", "module.exports = 123") write("a.js", "module.exports = 123")
write("b.js", 'var a = require("./a").toString()\nmodule.exports = a') write("b.js", 'var a = require("./a").toString()\nmodule.exports = a')
write("c.js", 'var b = require("./b")\nvar a = require("./a").toString()') write("c.js", 'var b = require("./b")\nvar a = require("./a").toString()')
bundle(ns + "c.js", ns + "out.js")
o(read("out.js")).equals(";(function() {\nvar _0 = 123\nvar a0 = _0.toString()\nvar b = a0\nvar a = _0.toString()\n}());") o(bundle(ns + "c.js")).equals(";(function() {\nvar _0 = 123\nvar a0 = _0.toString()\nvar b = a0\nvar a = _0.toString()\n}());")
remove("a.js") remove("a.js")
remove("b.js") remove("b.js")
@ -304,82 +258,68 @@ o.spec("bundler", function() {
write("b.js", 'var d = require("./d")\nmodule.exports = function() {return d + 1}') write("b.js", 'var d = require("./d")\nmodule.exports = function() {return d + 1}')
write("c.js", 'var d = require("./d")\nmodule.exports = function() {return d + 2}') write("c.js", 'var d = require("./d")\nmodule.exports = function() {return d + 2}')
write("d.js", "module.exports = 1") write("d.js", "module.exports = 1")
bundle(ns + "a.js", ns + "out.js")
o(read("out.js")).equals(";(function() {\nvar d = 1\nvar b = function() {return d + 1}\nvar c = function() {return d + 2}\n}());") o(bundle(ns + "a.js")).equals(";(function() {\nvar d = 1\nvar b = function() {return d + 1}\nvar c = function() {return d + 2}\n}());")
remove("a.js") remove("a.js")
remove("b.js") remove("b.js")
remove("c.js") remove("c.js")
remove("d.js") remove("d.js")
remove("out.js")
}) })
o("disambiguates conflicts if imported collides with itself", function() { o("disambiguates conflicts if imported collides with itself", function() {
write("a.js", 'var b = require("./b")') write("a.js", 'var b = require("./b")')
write("b.js", "var b = 1\nmodule.exports = function() {return b}") write("b.js", "var b = 1\nmodule.exports = function() {return b}")
bundle(ns + "a.js", ns + "out.js")
o(read("out.js")).equals(";(function() {\nvar b0 = 1\nvar b = function() {return b0}\n}());") o(bundle(ns + "a.js")).equals(";(function() {\nvar b0 = 1\nvar b = function() {return b0}\n}());")
remove("a.js") remove("a.js")
remove("b.js") remove("b.js")
remove("out.js")
}) })
o("disambiguates conflicts if imported collides with something else", function() { o("disambiguates conflicts if imported collides with something else", function() {
write("a.js", 'var a = 1\nvar b = require("./b")') write("a.js", 'var a = 1\nvar b = require("./b")')
write("b.js", "var a = 2\nmodule.exports = function() {return a}") write("b.js", "var a = 2\nmodule.exports = function() {return a}")
bundle(ns + "a.js", ns + "out.js")
o(read("out.js")).equals(";(function() {\nvar a = 1\nvar a0 = 2\nvar b = function() {return a0}\n}());") o(bundle(ns + "a.js")).equals(";(function() {\nvar a = 1\nvar a0 = 2\nvar b = function() {return a0}\n}());")
remove("a.js") remove("a.js")
remove("b.js") remove("b.js")
remove("out.js")
}) })
o("disambiguates conflicts if imported collides with function declaration", function() { o("disambiguates conflicts if imported collides with function declaration", function() {
write("a.js", 'function a() {}\nvar b = require("./b")') write("a.js", 'function a() {}\nvar b = require("./b")')
write("b.js", "var a = 2\nmodule.exports = function() {return a}") write("b.js", "var a = 2\nmodule.exports = function() {return a}")
bundle(ns + "a.js", ns + "out.js")
o(read("out.js")).equals(";(function() {\nfunction a() {}\nvar a0 = 2\nvar b = function() {return a0}\n}());") o(bundle(ns + "a.js")).equals(";(function() {\nfunction a() {}\nvar a0 = 2\nvar b = function() {return a0}\n}());")
remove("a.js") remove("a.js")
remove("b.js") remove("b.js")
remove("out.js")
}) })
o("disambiguates conflicts if imported collides with another module's private", function() { o("disambiguates conflicts if imported collides with another module's private", function() {
write("a.js", 'var b = require("./b")\nvar c = require("./c")') write("a.js", 'var b = require("./b")\nvar c = require("./c")')
write("b.js", "var a = 1\nmodule.exports = function() {return a}") write("b.js", "var a = 1\nmodule.exports = function() {return a}")
write("c.js", "var a = 2\nmodule.exports = function() {return a}") write("c.js", "var a = 2\nmodule.exports = function() {return a}")
bundle(ns + "a.js", ns + "out.js")
o(read("out.js")).equals(";(function() {\nvar a = 1\nvar b = function() {return a}\nvar a0 = 2\nvar c = function() {return a0}\n}());") o(bundle(ns + "a.js")).equals(";(function() {\nvar a = 1\nvar b = function() {return a}\nvar a0 = 2\nvar c = function() {return a0}\n}());")
remove("a.js") remove("a.js")
remove("b.js") remove("b.js")
remove("c.js") remove("c.js")
remove("out.js")
}) })
o("does not mess up strings", function() { o("does not mess up strings", function() {
write("a.js", 'var b = require("./b")') write("a.js", 'var b = require("./b")')
write("b.js", 'var b = "b b b \\" b"\nmodule.exports = function() {return b}') write("b.js", 'var b = "b b b \\" b"\nmodule.exports = function() {return b}')
bundle(ns + "a.js", ns + "out.js")
o(read("out.js")).equals(';(function() {\nvar b0 = "b b b \\\" b"\nvar b = function() {return b0}\n}());') o(bundle(ns + "a.js")).equals(';(function() {\nvar b0 = "b b b \\\" b"\nvar b = function() {return b0}\n}());')
remove("a.js") remove("a.js")
remove("b.js") remove("b.js")
remove("out.js")
}) })
o("does not mess up properties", function() { o("does not mess up properties", function() {
write("a.js", 'var b = require("./b")') write("a.js", 'var b = require("./b")')
write("b.js", "var b = {b: 1}\nmodule.exports = function() {return b.b}") write("b.js", "var b = {b: 1}\nmodule.exports = function() {return b.b}")
bundle(ns + "a.js", ns + "out.js")
o(read("out.js")).equals(";(function() {\nvar b0 = {b: 1}\nvar b = function() {return b0.b}\n}());") o(bundle(ns + "a.js")).equals(";(function() {\nvar b0 = {b: 1}\nvar b = function() {return b0.b}\n}());")
remove("a.js") remove("a.js")
remove("b.js") remove("b.js")
remove("out.js")
}) })
}) })

1664
package-lock.json generated

File diff suppressed because it is too large Load diff

View file

@ -30,6 +30,7 @@
"devDependencies": { "devDependencies": {
"@alrra/travis-scripts": "^3.0.1", "@alrra/travis-scripts": "^3.0.1",
"benchmark": "^2.1.4", "benchmark": "^2.1.4",
"chokidar": "^2.0.4",
"dedent": "^0.7.0", "dedent": "^0.7.0",
"eslint": "^3.19.0", "eslint": "^3.19.0",
"gh-pages": "^0.12.0", "gh-pages": "^0.12.0",