Skip to content

Commit e88d13c

Browse files
committed
CLI: Additional workarounds for on demand CLI dependencies, see #618
1 parent 44f6357 commit e88d13c

File tree

7 files changed

+30
-30
lines changed

7 files changed

+30
-30
lines changed

.gitignore

+1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
*.log
22
npm-debug.*
33
node_modules/
4+
cli/node_modules/
45
docs/
56
coverage/
67
sandbox/

.npmignore

+1
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
*.log
44
npm-debug.*
55
node_modules/
6+
cli/node_modules/
67
docs/
78
coverage/
89
sandbox/

cli/package.json

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
{}

cli/pbjs.js

+1-6
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,7 @@ var path = require("path"),
44
pkg = require(path.join(__dirname, "..", "package.json")),
55
util = require("./util");
66

7-
util.setup([
8-
"minimist",
9-
"chalk",
10-
"glob",
11-
"uglify-js"
12-
], pkg.devDependencies);
7+
util.setup();
138

149
var protobuf = require(".."),
1510
minimist = require("minimist"),

cli/pbts.js

+1-7
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,7 @@ var child_process = require("child_process"),
55
pkg = require(path.join(__dirname, "..", "package.json")),
66
util = require("./util");
77

8-
util.setup([
9-
"minimist",
10-
"chalk",
11-
"glob",
12-
"tmp",
13-
"jsdoc"
14-
], pkg.devDependencies);
8+
util.setup();
159

1610
var minimist = require("minimist"),
1711
chalk = require("chalk"),

cli/util.js

+23-16
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
1+
"use strict";
12
var fs = require("fs"),
23
path = require("path"),
3-
child_process = require("child_process");
4+
child_process = require("child_process"),
5+
Module = require("module");
46

57
var protobuf = require("..");
68

@@ -69,25 +71,30 @@ exports.inspect = function inspect(object, indent) {
6971
return sb.join("\n");
7072
};
7173

72-
exports.setup = function(modules, versions) {
73-
for (var i = 0; i < modules.length;) {
74+
exports.setup = function() {
75+
// this one is important. without it, this folder won't be searched anymore.
76+
try { fs.mkdirSync(path.join(__dirname, "node_modules")); } catch (e) {}
77+
78+
// find out which modules are missing
79+
var pkg = require(path.join(__dirname, "..", "package.json"));
80+
var install = [];
81+
pkg.cliDependencies.forEach(function(name) {
7482
try {
75-
// do not feed the cache
76-
require.resolve(path.join(modules[i], "package.json"));
77-
modules.splice(i, 1);
83+
require.resolve(name + "/package.json"); // jsdoc has no main file
7884
} catch (e) {
79-
++i;
85+
var version = pkg.dependencies[name] || pkg.devDependencies[name];
86+
install.push(version ? name + "@" + version : name);
8087
}
81-
}
82-
if (!modules.length)
83-
return;
84-
modules = modules.map(function(name) {
85-
return name + "@" + versions[name];
8688
});
87-
var cmd = "npm --silent --only=prod install " + modules.join(" ");
88-
process.stderr.write("setting up " + modules.join(", ") + " ...\n");
89-
child_process.execSync(cmd, {
90-
cwd: path.join(__dirname, ".."),
89+
if (!install.length) {
90+
try { fs.rmdirSync(path.join(__dirname, "node_modules")); } catch (e) {}
91+
return;
92+
}
93+
94+
// if any are missing, install them. this relies on an empty package.json in cli/.
95+
process.stderr.write("installing CLI dependencies: " + install.join(", ") + "\n");
96+
child_process.execSync("npm --silent install " + install.join(" "), {
97+
cwd: __dirname,
9198
stdio: "ignore"
9299
});
93100
};

package.json

+2-1
Original file line numberDiff line numberDiff line change
@@ -88,5 +88,6 @@
8888
"vinyl-source-stream": "^1.1.0",
8989
"zuul": "^3.11.1",
9090
"zuul-ngrok": "^4.0.0"
91-
}
91+
},
92+
"cliDependencies": [ "chalk", "glob", "jsdoc", "minimist", "tmp", "uglify-js" ]
9293
}

0 commit comments

Comments
 (0)