Skip to content

Commit a3d1a3d

Browse files
committed
Use browser-request for request, and add npm-registry-client hacks
npm-registry-client is another module with dynamic require. Add preloaded fs.readdirSync() with the directory contents, and replace the dynamic require() with our own. Ref GH-2, GH-1.
1 parent 89c635b commit a3d1a3d

File tree

3 files changed

+60
-4
lines changed

3 files changed

+60
-4
lines changed

demo.js

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ var browserify_builtins = require('browserify/lib/builtins');
77
browserify_builtins.child_process = 'child_process.js';
88
browserify_builtins.fs = require.resolve('browserify-fs'); // TODO: what is the api equivalent of cli -r fs:browserify-fs?
99
browserify_builtins['graceful-fs'] = browserify_builtins.fs;
10+
browserify_builtins['request'] = require.resolve('browser-request');
1011

1112
var b = browserify();
1213

@@ -17,10 +18,17 @@ var b = browserify();
1718
var textReplacements = [
1819
[/require\.resolve/g, 'require'], // TODO: what is require.resolve for browserify?
1920

21+
// semi-dynamic fs.readFileSync()
2022
[/fs\.readFileSync/g, 'window.staticReadFileSync'],
2123
[/require\('fs'\)\.readFileSync/g, 'window.staticReadFileSync'],
2224

23-
[/require\(__dirname\+"\/"\+a\+"\.js"\)/, 'window.npmCommandRequire(__dirname+"/"+a+".js")'], // can't do dynamic require()
25+
// semi-dynamic require()
26+
27+
// node_modules/npm/lib/npm.js
28+
[/require\(__dirname\+"\/"\+a\+"\.js"\)/g, 'window.npmCommandRequire(__dirname+"/"+a+".js")'],
29+
30+
// npm/node_modules/npm-registry-client/index.js
31+
[/client\[name\] = require\(entry\)/g, 'client[name] = window.npmRegistryClientRequire(entry)'],
2432
];
2533

2634
// Included file data for staticReadFileSync; this is similar to

package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,8 @@
1818
"wzrd": "^1.2.1",
1919
"brfs": "^1.3.0",
2020
"through": "^2.3.6",
21-
"browserify-fs": "^1.0.0"
21+
"browserify-fs": "^1.0.0",
22+
"browser-request": "^0.3.3"
2223
},
2324
"license": "MIT"
2425
}

webnpm.js

Lines changed: 49 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,17 +14,63 @@ window.staticReadFileSync = function(path) {
1414

1515
console.log('file not found (add to preloadedFilenames list): ',path);
1616
return path
17-
}
17+
};
18+
19+
var preloadedReaddirSyncs = {
20+
'/node_modules/npm/node_modules/npm-registry-client/lib': [
21+
// node_modules/npm/node_modules/npm-registry-client/lib|perl -pe'chomp;$_=" \"$_\",\n"'
22+
"access.js",
23+
"adduser.js",
24+
"attempt.js",
25+
"authify.js",
26+
"deprecate.js",
27+
"dist-tags",
28+
"fetch.js",
29+
"get.js",
30+
"initialize.js",
31+
"publish.js",
32+
"request.js",
33+
"star.js",
34+
"stars.js",
35+
"tag.js",
36+
"unpublish.js",
37+
"whoami.js",
38+
],
39+
};
1840

1941
// TODO: https://github.com/substack/brfs/issues/19
2042
window.staticReaddirSync = function(path) {
2143
console.log('readdirSync', path);
44+
if (path in preloadedReaddirSyncs)
45+
return preloadedReaddirSyncs[path];
2246

2347
return [];
2448
};
2549

50+
window.npmRegistryClientRequire = function(path) {
51+
console.log('npm-registry-client require',path);
52+
// ls node_modules/npm/node_modules/npm-registry-client/lib|perl -pe's/.js//g'|perl -pe'chomp;$_=" if (path===\"/node_modules/npm/node_modules/npm-registry-client/lib/$_.js\") return require(\"npm/node_modules/npm-registry-client/lib/$_\");\n"'
53+
if (path==="/node_modules/npm/node_modules/npm-registry-client/lib/access.js") return require("npm/node_modules/npm-registry-client/lib/access");
54+
if (path==="/node_modules/npm/node_modules/npm-registry-client/lib/adduser.js") return require("npm/node_modules/npm-registry-client/lib/adduser");
55+
if (path==="/node_modules/npm/node_modules/npm-registry-client/lib/attempt.js") return require("npm/node_modules/npm-registry-client/lib/attempt");
56+
if (path==="/node_modules/npm/node_modules/npm-registry-client/lib/authify.js") return require("npm/node_modules/npm-registry-client/lib/authify");
57+
if (path==="/node_modules/npm/node_modules/npm-registry-client/lib/deprecate.js") return require("npm/node_modules/npm-registry-client/lib/deprecate");
58+
//if (path==="/node_modules/npm/node_modules/npm-registry-client/lib/dist-tags.js") return require("npm/node_modules/npm-registry-client/lib/dist-tags");
59+
if (path==="/node_modules/npm/node_modules/npm-registry-client/lib/fetch.js") return require("npm/node_modules/npm-registry-client/lib/fetch");
60+
if (path==="/node_modules/npm/node_modules/npm-registry-client/lib/get.js") return require("npm/node_modules/npm-registry-client/lib/get");
61+
if (path==="/node_modules/npm/node_modules/npm-registry-client/lib/initialize.js") return require("npm/node_modules/npm-registry-client/lib/initialize");
62+
if (path==="/node_modules/npm/node_modules/npm-registry-client/lib/publish.js") return require("npm/node_modules/npm-registry-client/lib/publish");
63+
if (path==="/node_modules/npm/node_modules/npm-registry-client/lib/request.js") return require("npm/node_modules/npm-registry-client/lib/request");
64+
if (path==="/node_modules/npm/node_modules/npm-registry-client/lib/star.js") return require("npm/node_modules/npm-registry-client/lib/star");
65+
if (path==="/node_modules/npm/node_modules/npm-registry-client/lib/stars.js") return require("npm/node_modules/npm-registry-client/lib/stars");
66+
if (path==="/node_modules/npm/node_modules/npm-registry-client/lib/tag.js") return require("npm/node_modules/npm-registry-client/lib/tag");
67+
if (path==="/node_modules/npm/node_modules/npm-registry-client/lib/unpublish.js") return require("npm/node_modules/npm-registry-client/lib/unpublish");
68+
if (path==="/node_modules/npm/node_modules/npm-registry-client/lib/whoami.js") return require("npm/node_modules/npm-registry-client/lib/whoami");
69+
console.log('not found, add to npmRegistryClientRequire:',path);
70+
};
71+
2672
window.npmCommandRequire = function(path) {
27-
console.log('npm require',path);
73+
console.log('npm command require',path);
2874
// ls node_modules/npm/lib/|perl -pe's/.js//g'|perl -pe'chomp;$_=" if (path===\"/node_modules/npm/lib/$_.js\") return require(\"npm/lib/$_\");\n"'
2975
if (path==="/node_modules/npm/lib/access.js") return require("npm/lib/access");
3076
if (path==="/node_modules/npm/lib/adduser.js") return require("npm/lib/adduser");
@@ -91,6 +137,7 @@ fs.statSync = function(file) {
91137
return {
92138
isFile: function() { return true; },
93139
isFIFO: function() { return false; },
140+
isDirectory: function() { return false; },
94141
};
95142
};
96143

0 commit comments

Comments
 (0)