1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
|
var setterSrc = require("../__set__.js").toString(),
getterSrc = require("../__get__.js").toString(),
fs = require("fs"),
path = require("path"),
getImportGlobalsSrc = require("../getImportGlobalsSrc.js"),
getRewireRequires = require("./getRewireRequires.js"),
detectStrictMode = require("../detectStrictMode.js"),
appendix = fs.readFileSync(__dirname + "/appendix.js", "utf8"),
importGlobalsSrc = getImportGlobalsSrc(),
injectionSrc = getInjectionSrc().replace(/\s+/g, " "); // strip out unnecessary spaces to be unobtrusive in the debug view
function getInjectionSrc() {
return 'require("rewire").register(__filename, ' + setterSrc + ', ' + getterSrc + ');' +
'process = require("__browserify_process");' +
'require = window.browserifyRequire.getProxy(require, __filename);';
}
function browserifyMiddleware(b) {
var strictMode;
b.register(".js", function injectRewire(src, filename) {
var rewireRequires = getRewireRequires(src),
strictMode = "";
// Add all modules that are loaded by rewire() manually to browserify because browserify's
// require-sniffing doesn't work here.
rewireRequires.forEach(function forEachRewireRequire(requirePath) {
if (requirePath.charAt(0) === ".") {
requirePath = path.resolve(path.dirname(filename), requirePath);
}
b.require(requirePath);
});
if (detectStrictMode(src) === true) {
strictMode = ' "use strict"; ';
}
filename = filename.replace(/\\/g, "/");
if (filename.indexOf("/rewire/lib") === -1) {
src =
strictMode +
"var global = window; " +
importGlobalsSrc +
injectionSrc +
// For a better debugging experience we're adding a comment with the filename
"\n//// " + filename + " /////////////////////////////////////////////////////////////////////////////////////////////////////////////\n\n" +
src +
"\n\n////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n";
}
return src;
});
b.append(appendix);
return b;
}
module.exports = browserifyMiddleware;
|