Skip to content

Commit 0082de4

Browse files
committed
[Plugin] install plugin's depedencies
Signed-off-by: Eric Wang <[email protected]>
1 parent 77d615a commit 0082de4

File tree

2 files changed

+25
-10
lines changed

2 files changed

+25
-10
lines changed

lib/commands/plugin.js

+23-9
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ var fs = require('fs');
22
var path = require('path');
33

44
var h = require('../helper');
5-
var chalk = require('../chalk');
65
var log = require('../log');
76
var Plugin = require('../plugin');
87
var session = require('../session');
@@ -38,17 +37,33 @@ var cmd = {
3837
}
3938
};
4039

40+
function install(name) {
41+
// copy to plugins folder
42+
var newname = path.join(Plugin.dir, path.basename(name));
43+
var src = fs.createReadStream(name);
44+
src.pipe(fs.createWriteStream(newname));
45+
src.on('end', function() {
46+
log.debug('copied to ' + newname);
47+
48+
// install dependencies
49+
var plugin = require(path.relative(__dirname, newname));
50+
if (plugin.deps.length === 0) return;
51+
52+
var cmd = 'npm install --save ' + plugin.deps.join(' ');
53+
log.debug(cmd);
54+
require('child_process').execSync(cmd, {
55+
cwd: path.resolve(__dirname, '../..')
56+
});
57+
});
58+
}
59+
4160
cmd.handler = function(argv) {
4261
session.argv = argv;
4362
var name = argv.name;
4463

4564
if (argv.install) {
46-
if (!name || !fs.existsSync(name))
47-
return log.error('Plugin not found!');
48-
49-
var newName = path.join(Plugin.dir, path.basename(name));
50-
fs.createReadStream(name).pipe(fs.createWriteStream(newName));
51-
return;
65+
if (!name || !fs.existsSync(name)) return log.error('Plugin not found!');
66+
return install(name);
5267
}
5368

5469
var plugins = Plugin.plugins;
@@ -65,8 +80,7 @@ cmd.handler = function(argv) {
6580
return;
6681
}
6782

68-
if (plugins.length === 0)
69-
return log.error('Plugin not found!');
83+
if (plugins.length === 0) return log.error('Plugin not found!');
7084

7185
var plugin = plugins[0];
7286
var oldname = Plugin.fullpath(plugin.file);

lib/plugin.js

+2-1
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,13 @@ var h = require('./helper');
66
var config = require('./config');
77
var log = require('./log');
88

9-
function Plugin(id, name, ver, desc) {
9+
function Plugin(id, name, ver, desc, deps) {
1010
this.id = id;
1111
this.name = name;
1212
this.ver = ver || 'default';
1313
this.desc = desc;
1414
this.enabled = true;
15+
this.deps = deps || [];
1516
}
1617

1718
Plugin.prototype.init = function() {

0 commit comments

Comments
 (0)