Skip to content

Commit 7382ef5

Browse files
committed
feat(reload): 增加从ykit服务拉取插件功能
1 parent 6b95f36 commit 7382ef5

File tree

3 files changed

+119
-7
lines changed

3 files changed

+119
-7
lines changed

lib/commands/reload.js

Lines changed: 59 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,70 @@
11
'use strict';
22

33
var Manager = require('../modules/manager.js');
4+
var child_process = require('child_process');
5+
var requireg = require('requireg');
6+
var request = require('request');
7+
var semver = require('semver');
48

59
exports.usage = "重载插件";
610

11+
exports.setOptions = function (optimist) {
12+
optimist.alias('h', 'host');
13+
optimist.describe('h', '拉取插件服务地址');
14+
};
15+
716
exports.run = function (options) {
17+
var host = 'http://' + (options.h || options.host || '192.168.237.71:9999/download');
818

19+
// 重载全局插件
920
Manager.reloadRC();
1021

11-
success('Complete!');
22+
// 检查devDependencies中的ykit-config-{name}
23+
var packageJsonContent = JSON.parse(fs.readFileSync('./package.json', { encoding: 'utf-8' }));
24+
var ykitModuleReg = /^(@[^\/]+\/)(ykit\-(\w+)\-[\w\-]+)$/;
25+
26+
var willInstallPackages = [];
27+
28+
if (packageJsonContent.devDependencies) {
29+
(function () {
30+
var devDependencies = packageJsonContent.devDependencies;
31+
Object.keys(devDependencies).map(function (depName, i) {
32+
if (ykitModuleReg.test(depName) && !requireg.resolve(depName)) {
33+
var version = devDependencies[depName];
34+
var packagePath = './node_modules/@qnpm';
35+
36+
if (semver.valid(version)) {
37+
(function () {
38+
// 确保存在@qnpm目录
39+
mkdirp.sync(packagePath);
40+
41+
var tarName = depName + '@' + version + '.tar.gz';
42+
var extractPath = sysPath.join(process.cwd(), './node_modules/', tarName);
43+
var downloadPath = host + '/' + tarName;
44+
var downloadStream = request(downloadPath).pipe(fs.createWriteStream(extractPath));
45+
46+
log('downloading ' + extractPath);
47+
downloadStream.on('finish', function (e) {
48+
if (e) {
49+
return error(e);
50+
}
51+
52+
log('extracting ' + extractPath);
53+
child_process.exec('cd ./node_modules/@qnpm/ && tar -xf ' + extractPath, function (e, stdout, errout) {
54+
if (e) {
55+
return error(e);
56+
}
57+
58+
success('complete!');
59+
fs.unlinkSync(extractPath);
60+
});
61+
});
62+
})();
63+
} else {
64+
error(depName + '版本号必须确定,如0.1.0');
65+
}
66+
}
67+
});
68+
})();
69+
}
1270
};

package.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,22 +22,22 @@
2222
"globby": "^5.0.0",
2323
"html-loader": "^0.4.3",
2424
"inquirer": "^1.1.1",
25-
"jerryproxy-ykit": "^1.0.42",
25+
"jerryproxy-ykit": "^1.0.55",
2626
"js-yaml": "^3.6.1",
2727
"json-loader": "^0.5.4",
2828
"json5": "^0.5.0",
2929
"left-pad": "^1.1.0",
30-
"less": "^2.7.1",
31-
"less-loader": "^2.2.3",
3230
"livereload": "^0.4.1",
3331
"loader-utils": "^0.2.15",
3432
"mkdirp": "^0.5.1",
3533
"moment": "^2.14.1",
3634
"optimist": "^0.6.1",
3735
"replacestream": "^4.0.0",
36+
"request": "^2.75.0",
3837
"require-uncached": "^1.0.2",
3938
"requireg": "^0.1.5",
4039
"right-pad": "^1.0.0",
40+
"semver": "^5.3.0",
4141
"serve-index": "^1.8.0",
4242
"serve-static": "^1.11.1",
4343
"style-loader": "^0.13.1",

src/commands/reload.js

Lines changed: 57 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,66 @@
11
'use strict';
22

3-
let Manager = require('../modules/manager.js');
3+
const Manager = require('../modules/manager.js')
4+
const child_process = require('child_process')
5+
const requireg = require('requireg')
6+
const request = require('request')
7+
const semver = require('semver')
48

5-
exports.usage = "重载插件";
9+
exports.usage = "重载插件"
10+
11+
exports.setOptions = (optimist) => {
12+
optimist.alias('h', 'host')
13+
optimist.describe('h', '拉取插件服务地址')
14+
};
615

716
exports.run = (options) => {
17+
const host = 'http://' + (options.h || options.host || '192.168.237.71:9999/download')
818

19+
// 重载全局插件
920
Manager.reloadRC();
1021

11-
success('Complete!');
22+
// 检查devDependencies中的ykit-config-{name}
23+
const packageJsonContent = JSON.parse(fs.readFileSync('./package.json', {encoding: 'utf-8'}))
24+
const ykitModuleReg = /^(@[^\/]+\/)(ykit\-(\w+)\-[\w\-]+)$/
25+
26+
let willInstallPackages = []
27+
28+
if(packageJsonContent.devDependencies) {
29+
const devDependencies = packageJsonContent.devDependencies
30+
Object.keys(devDependencies).map((depName, i) => {
31+
if(ykitModuleReg.test(depName) && !requireg.resolve(depName)) {
32+
const version = devDependencies[depName]
33+
const packagePath = './node_modules/@qnpm'
34+
35+
if(semver.valid(version)) {
36+
// 确保存在@qnpm目录
37+
mkdirp.sync(packagePath)
38+
39+
const tarName = depName + '@' + version + '.tar.gz'
40+
const extractPath = sysPath.join(process.cwd(), './node_modules/', tarName)
41+
const downloadPath = host + '/' + tarName
42+
const downloadStream = request(downloadPath).pipe(fs.createWriteStream(extractPath))
43+
44+
log('downloading ' + extractPath)
45+
downloadStream.on('finish', (e) => {
46+
if(e) {
47+
return error(e)
48+
}
49+
50+
log('extracting ' + extractPath)
51+
child_process.exec('cd ./node_modules/@qnpm/ && tar -xf ' + extractPath, (e, stdout, errout) => {
52+
if(e) {
53+
return error(e)
54+
}
55+
56+
success('complete!')
57+
fs.unlinkSync(extractPath)
58+
})
59+
})
60+
} else {
61+
error(depName + '版本号必须确定,如0.1.0')
62+
}
63+
}
64+
})
65+
}
1266
};

0 commit comments

Comments
 (0)