|
| 1 | +"use strict"; |
1 | 2 | var fs = require("fs"), |
2 | 3 | path = require("path"), |
3 | | - child_process = require("child_process"); |
| 4 | + child_process = require("child_process"), |
| 5 | + Module = require("module"); |
4 | 6 |
|
5 | 7 | var protobuf = require(".."); |
6 | 8 |
|
@@ -69,25 +71,30 @@ exports.inspect = function inspect(object, indent) { |
69 | 71 | return sb.join("\n"); |
70 | 72 | }; |
71 | 73 |
|
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) { |
74 | 82 | 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 |
78 | 84 | } catch (e) { |
79 | | - ++i; |
| 85 | + var version = pkg.dependencies[name] || pkg.devDependencies[name]; |
| 86 | + install.push(version ? name + "@" + version : name); |
80 | 87 | } |
81 | | - } |
82 | | - if (!modules.length) |
83 | | - return; |
84 | | - modules = modules.map(function(name) { |
85 | | - return name + "@" + versions[name]; |
86 | 88 | }); |
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, |
91 | 98 | stdio: "ignore" |
92 | 99 | }); |
93 | 100 | }; |
|
0 commit comments