Skip to content

Commit 4380c73

Browse files
committed
feat(env): 支持node 0.12
1 parent bbb5808 commit 4380c73

File tree

21 files changed

+1293
-28
lines changed

21 files changed

+1293
-28
lines changed

bin/ykit

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
'use strict';
44

5-
let cli = require('../src/cli'),
5+
var cli = require('../lib/cli'),
66
cmd = process.argv[2];
77

88
cmd ? cli.run(cmd) : cli.help();

gulpfile.js

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
const gulp = require('gulp');
2+
const babel = require('gulp-babel');
3+
const watch = require('gulp-watch');
4+
5+
gulp.task('default', ['compileJS', 'moveConfig']);
6+
7+
gulp.task('compileJS', [], function() {
8+
return watch('src/**/*.js', { verbose: true })
9+
.pipe(babel({presets: ['es2015']}))
10+
.pipe(gulp.dest('lib'));
11+
})
12+
13+
gulp.task('moveConfig', [], function() {
14+
return watch('src/config/**/*.*', { verbose: true }, () => {
15+
gulp.src('src/config/**/*.*', {base: 'src/'})
16+
.pipe(gulp.dest('lib'));
17+
})
18+
});

lib/cli.js

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
'use strict';
2+
3+
require('./global');
4+
5+
var Manager = require('./modules/manager.js');
6+
7+
var helpTitle = function helpTitle() {
8+
info();
9+
info('===================== YKit ' + packageJSON.version + ' ====================');
10+
info();
11+
};
12+
13+
var initOptions = function initOptions(cmd) {
14+
if (cmd.setOptions) {
15+
cmd.setOptions(optimist);
16+
} else if (cmd.set_options) {
17+
cmd.set_options(optimist);
18+
}
19+
optimist.alias('h', 'help');
20+
optimist.describe('h', '查看帮助');
21+
var options = optimist.argv;
22+
options.cwd = process.cwd();
23+
return options;
24+
};
25+
26+
var cli = module.exports = {
27+
run: function run(cmdName) {
28+
var project = Manager.getProject(process.cwd()),
29+
cmd = project.commands.filter(function (item) {
30+
return item.name == cmdName;
31+
})[0];
32+
if (!cmd) {
33+
error('请确认是否存在 ' + cmdName + ' 命令');
34+
return;
35+
}
36+
cmd = cmd.module;
37+
var options = initOptions(cmd);
38+
if (options.h || options.help) {
39+
helpTitle();
40+
info('命令:', cmdName);
41+
info('说明:', cmd.usage || '');
42+
info();
43+
optimist.showHelp();
44+
info(' 如果需要帮助, 请使用 ykit {命令名} --help ');
45+
} else {
46+
cmd.run.call({ project: project }, options);
47+
}
48+
},
49+
help: function help() {
50+
helpTitle();
51+
Manager.getProject(process.cwd()).commands.forEach(function (command) {
52+
info(' ' + rightPad(command.name, 15) + ' # ' + (command.module.usage || ''));
53+
});
54+
info();
55+
info('可用的全局配置有:', (Manager.readRC().configs || []).map(function (item) {
56+
return item.name.substring(12);
57+
}).join(', '));
58+
info();
59+
info(' 如果需要帮助, 请使用 ykit {命令名} --help ');
60+
}
61+
};

lib/commands/init.js

Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
'use strict';
2+
3+
var execSync = require('child_process').execSync;
4+
var replaceStream = require('replacestream');
5+
var inquirer = require('inquirer');
6+
var Manager = require('../modules/manager.js');
7+
8+
exports.usage = "项目初始化";
9+
10+
exports.setOptions = function (optimist) {};
11+
12+
exports.run = function (options) {
13+
Manager.reloadRC();
14+
15+
var cwd = options.cwd,
16+
projectName = options._[1],
17+
defaultName = '';
18+
19+
if (fileExists('./package.json')) {
20+
defaultName = JSON.parse(fs.readFileSync('./package.json')).name;
21+
} else {
22+
defaultName = sysPath.basename(cwd);
23+
}
24+
25+
var questions = [{
26+
type: 'input',
27+
name: 'name',
28+
message: 'project name(' + defaultName + '):'
29+
}, {
30+
type: 'list',
31+
name: 'type',
32+
message: 'config type:',
33+
choices: ['qunar', 'hy']
34+
}];
35+
36+
inquirer.prompt(questions).then(function (answers) {
37+
answers.name = answers.name || defaultName;
38+
39+
var initTmplPath = sysPath.resolve(__dirname, '../config/initTmpl/');
40+
var configFileName = 'ykit.' + answers.type + '.js';
41+
var writePackageJsonStream = void 0;
42+
43+
// 如果没有package.json,先添加package.json
44+
if (answers.name) {
45+
writePackageJsonStream = createPakcageJson();
46+
}
47+
48+
if (!writePackageJsonStream) {
49+
createConfigFile();
50+
installDependencies();
51+
} else {
52+
writePackageJsonStream.on('finish', function () {
53+
log('Successfully created package.json file in ' + cwd);
54+
55+
createConfigFile();
56+
installDependencies();
57+
});
58+
}
59+
60+
function createPakcageJson() {
61+
return fs.createReadStream(sysPath.resolve(initTmplPath, 'package.json')).pipe(replaceStream('#_name', answers.name)).pipe(fs.createWriteStream(sysPath.resolve(cwd, 'package.json')));
62+
}
63+
64+
function createConfigFile() {
65+
if (!fileExists('./' + configFileName)) {
66+
var stream = fs.createReadStream(sysPath.resolve(initTmplPath, 'ykit.common.js')).pipe(replaceStream('#_name', answers.name)).pipe(fs.createWriteStream(sysPath.resolve(cwd, configFileName)));
67+
68+
stream.on('finish', function () {
69+
log('Successfully created ' + configFileName + ' file in ' + cwd);
70+
});
71+
}
72+
}
73+
74+
function installDependencies() {
75+
var packageName = 'ykit-config-' + answers.type,
76+
installConfigPackageCmd = 'npm i --save git+ssh://git@gitlab.corp.qunar.com:mfe/ykit-config-' + answers.type + '.git';
77+
78+
log('Installing ' + packageName + '...');
79+
execSync(installConfigPackageCmd);
80+
}
81+
});
82+
};
83+
84+
function fileExists(filePath) {
85+
try {
86+
return fs.statSync(filePath).isFile();
87+
} catch (err) {
88+
return false;
89+
}
90+
}

lib/commands/lint.js

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
'use strict';
2+
3+
var Manager = require('../modules/manager.js');
4+
5+
exports.usage = "代码质量检测";
6+
7+
exports.setOptions = function (optimist) {
8+
optimist.alias('d', 'dir');
9+
optimist.describe('d', '检测特定目录/文件');
10+
};
11+
12+
exports.run = function (options) {
13+
var cwd = options.cwd,
14+
project = this.project,
15+
dir = options.d || options.dir;
16+
17+
async.series([function (callback) {
18+
return project.lint(dir, callback);
19+
}, function (callback) {
20+
return project.lintCss(dir, callback);
21+
}], function (err, results) {
22+
if (!err) {
23+
if (results[0] && results[1]) {
24+
success('All files complete without error.');
25+
}
26+
} else if (err === true) {
27+
error('Lint Error!');
28+
} else {
29+
error(err);
30+
}
31+
});
32+
};

lib/commands/pack.js

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
'use strict';
2+
3+
var Manager = require('../modules/manager.js');
4+
5+
exports.usage = "资源编译、打包";
6+
7+
exports.setOptions = function (optimist) {
8+
optimist.alias('l', 'lint');
9+
optimist.describe('l', '先进行验证');
10+
optimist.alias('m', 'min');
11+
optimist.describe('m', '压缩/混淆项目文件');
12+
optimist.alias('s', 'sourcemap');
13+
optimist.describe('s', '使用sourcemap');
14+
optimist.alias('g', 'group');
15+
optimist.describe('g', 'exports 分组');
16+
};
17+
18+
exports.run = function (options) {
19+
var cwd = options.cwd,
20+
min = options.m || options.min || false,
21+
lint = options.l || options.lint || false,
22+
group = options.g || options.group,
23+
sourcemap = options.s || options.sourcemap,
24+
project = this.project;
25+
26+
if (typeof group == 'string') {
27+
if (project.config._config.entryGroup[group]) {
28+
project.config._config.entry = {};
29+
project.config.setExports(project.config._config.entryGroup[group]);
30+
} else {
31+
error('找不到 Exports 分组:', group);
32+
}
33+
}
34+
35+
project.pack({
36+
lint: lint,
37+
min: min,
38+
sourcemap: sourcemap
39+
}, function (err, stats) {
40+
if (err) {
41+
if (err !== true) {
42+
error(err);
43+
}
44+
}
45+
46+
project.packCallbacks.forEach(function (cb) {
47+
return cb(options, stats);
48+
});
49+
});
50+
};

lib/commands/reload.js

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
'use strict';
2+
3+
var Manager = require('../modules/manager.js');
4+
5+
exports.usage = "重载插件";
6+
7+
exports.run = function (options) {
8+
9+
Manager.reloadRC();
10+
11+
success('Complete!');
12+
};

0 commit comments

Comments
 (0)