Skip to content

Commit 44f6357

Browse files
committed
CLI: Revised automatic setup of cli dependencies, see #618
1 parent f2ffa07 commit 44f6357

File tree

5 files changed

+50
-35
lines changed

5 files changed

+50
-35
lines changed

Diff for: .npmignore

+1
Original file line numberDiff line numberDiff line change
@@ -17,3 +17,4 @@ src/util/inquire/
1717
src/util/path/
1818
src/util/pool/
1919
src/util/utf8/
20+
pbjs.png

Diff for: cli/pbjs.js

+12-4
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,22 @@
1+
"use strict";
12
var path = require("path"),
23
fs = require("fs"),
34
pkg = require(path.join(__dirname, "..", "package.json")),
45
util = require("./util");
56

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

1014
var protobuf = require(".."),
11-
targets = util.requireAll("./targets");
15+
minimist = require("minimist"),
16+
chalk = require("chalk"),
17+
glob = require("glob");
18+
19+
var targets = util.requireAll("./targets");
1220

1321
/**
1422
* Runs pbjs programmatically.

Diff for: cli/pbts.js

+15-10
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,22 @@
1-
var path = require("path"),
1+
"use strict";
2+
var child_process = require("child_process"),
3+
path = require("path"),
24
fs = require("fs"),
35
pkg = require(path.join(__dirname, "..", "package.json")),
46
util = require("./util");
5-
var child_process = require("child_process");
67

7-
var minimist = util.require("minimist", pkg.devDependencies.minimist),
8-
chalk = util.require("chalk", pkg.devDependencies.chalk),
9-
glob = util.require("glob", pkg.devDependencies.glob),
10-
tmp = util.require("tmp", pkg.devDependencies.tmp);
11-
12-
var jsdoc = util.require("jsdoc/package.json", pkg.devDependencies.jsdoc);
13-
14-
var protobuf = require("..");
8+
util.setup([
9+
"minimist",
10+
"chalk",
11+
"glob",
12+
"tmp",
13+
"jsdoc"
14+
], pkg.devDependencies);
15+
16+
var minimist = require("minimist"),
17+
chalk = require("chalk"),
18+
glob = require("glob"),
19+
tmp = require("tmp");
1520

1621
/**
1722
* Runs pbts programmatically.

Diff for: cli/targets/static.js

+2-3
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,8 @@
22
module.exports = static_target;
33

44
var protobuf = require("../.."),
5-
cliUtil = require("../util");
6-
7-
var UglifyJS = cliUtil.require("uglify-js", require(require("path").join(__dirname, "..", "..", "package.json")).devDependencies["uglify-js"]);
5+
cliUtil = require("../util"),
6+
UglifyJS = require("uglify-js");
87

98
var Type = protobuf.Type,
109
Service = protobuf.Service,

Diff for: cli/util.js

+20-18
Original file line numberDiff line numberDiff line change
@@ -69,25 +69,27 @@ exports.inspect = function inspect(object, indent) {
6969
return sb.join("\n");
7070
};
7171

72-
exports.require = function(name, version) {
73-
var sub = "";
74-
var p = name.indexOf("/");
75-
if (p > -1) {
76-
sub = name.substring(p);
77-
name = name.substring(0, p);
72+
exports.setup = function(modules, versions) {
73+
for (var i = 0; i < modules.length;) {
74+
try {
75+
// do not feed the cache
76+
require.resolve(path.join(modules[i], "package.json"));
77+
modules.splice(i, 1);
78+
} catch (e) {
79+
++i;
80+
}
7881
}
79-
var cwd = path.join(__dirname, "..");
80-
var dir = path.join(cwd, "node_modules", name);
81-
try {
82-
// do not feed the cache
83-
require.resolve(path.join(dir, "package.json"));
84-
} catch (e) {
85-
console.error("installing " + name + "@" + version + " ...");
86-
child_process.execSync("npm --silent install " + name + "@" + version, {
87-
cwd: cwd
88-
});
89-
}
90-
return require(name + sub);
82+
if (!modules.length)
83+
return;
84+
modules = modules.map(function(name) {
85+
return name + "@" + versions[name];
86+
});
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, ".."),
91+
stdio: "ignore"
92+
});
9193
};
9294

9395
exports.wrap = function(OUTPUT, options) {

0 commit comments

Comments
 (0)