Skip to content

Commit

Permalink
feat(init): 初始化改为只生成一个空工程
Browse files Browse the repository at this point in the history
  • Loading branch information
yuhaoju committed Dec 7, 2016
1 parent c814175 commit ab08750
Show file tree
Hide file tree
Showing 9 changed files with 101 additions and 326 deletions.
102 changes: 34 additions & 68 deletions lib/commands/init.js
@@ -1,14 +1,16 @@
'use strict';

var execSync = require('child_process').execSync;
var replaceStream = require('replacestream');
var inquirer = require('inquirer');
var Manager = require('../modules/manager.js');

exports.usage = '项目初始化';
exports.abbr = 'i';

exports.setOptions = function () {};
exports.setOptions = function () {
optimist.alias('l', 'lint');
optimist.describe('l', '先进行验证');
};

exports.run = function (options) {
Manager.reloadRC();

Expand All @@ -22,80 +24,44 @@ exports.run = function (options) {
defaultName = sysPath.basename(cwd);
}

var questions = [{
type: 'input',
name: 'name',
message: 'project name(' + defaultName + '):'
}, {
type: 'list',
name: 'type',
message: 'project type:',
choices: [{
name: 'qunar - 支持sass/less,实现资源带版本号,fekit_moudles打包,sync命令等',
value: 'qunar'
}, {
name: 'fekit - 主要用于fekit项目迁移,兼容fekit配置和模块化语法等',
value: 'fekit'
}, {
name: 'hy - 支持es6,更多功能仍在开发中',
value: 'hy'
}, {
name: 'basic - 默认基础配置',
value: 'basic'
}]
}];

inquirer.prompt(questions).then(function (answers) {
answers.name = answers.name || defaultName;

var initTmplPath = sysPath.resolve(__dirname, '../config/initTmpl/');
var writePackageJsonStream = void 0;

// 如果没有package.json,先添加package.json
if (!fileExists(packageJsonPath)) {
writePackageJsonStream = createPackageJson();
}
// TODO
var proName = defaultName;

if (!writePackageJsonStream) {
createConfigFile(answers.type);
installDependencies(answers.type);
} else {
writePackageJsonStream.on('finish', function () {
log('Successfully created package.json file in ' + cwd);
var initTmplPath = sysPath.resolve(__dirname, '../config/initTmpl/');
var writePackageJsonStream = void 0;

createConfigFile(answers.type);
installDependencies(answers.type);
});
}

function createPackageJson() {
return fs.createReadStream(sysPath.resolve(initTmplPath, 'package.json')).pipe(replaceStream('#_name', answers.name)).pipe(fs.createWriteStream(sysPath.resolve(cwd, 'package.json')));
}
// 如果没有package.json,先添加package.json
if (!fileExists(packageJsonPath)) {
writePackageJsonStream = createPackageJson();
}

function createConfigFile(configType) {
var configFileName = configType !== 'basic' ? 'ykit.' + configType + '.js' : 'ykit.js';
if (!writePackageJsonStream) {
createConfigFile();
} else {
writePackageJsonStream.on('finish', function () {
log('Successfully created package.json file in ' + cwd);

if (!fileExists('./' + configFileName)) {
var stream = fs.createReadStream(sysPath.resolve(initTmplPath, configType !== 'fekit' ? 'ykit.common.js' : 'ykit.fekit.js')).pipe(replaceStream('#_name', answers.name)).pipe(fs.createWriteStream(sysPath.resolve(cwd, configFileName)));
createConfigFile();
});
}

stream.on('finish', function () {
log('Successfully created ' + configFileName + ' file in ' + cwd);
});
}
}
function createPackageJson() {
return fs.createReadStream(sysPath.resolve(initTmplPath, 'package.json')).pipe(replaceStream('#_name', proName)).pipe(fs.createWriteStream(sysPath.resolve(cwd, 'package.json')));
}

function installDependencies(configType) {
if (configType === 'basic') {
return;
}
function createConfigFile() {
var configFileName = 'ykit.js';

var packageName = 'ykit-config-' + configType,
installConfigPackageCmd = 'npm i --save-dev --registry http://registry.npm.corp.qunar.com/ @qnpm/ykit-config-' + configType;
if (!fileExists('./' + configFileName)) {
var writeStream = fs.createWriteStream(sysPath.resolve(cwd, configFileName));
var configFilePath = sysPath.resolve(initTmplPath, 'ykit.common.js');
var stream = fs.createReadStream(configFilePath).pipe(replaceStream('#_name', proName)).pipe(writeStream);

log('Installing ' + packageName + '...');
execSync(installConfigPackageCmd);
stream.on('finish', function () {
log('Successfully created ' + configFileName + ' file in ' + cwd);
});
}
});
}
};

function fileExists(filePath) {
Expand Down
61 changes: 13 additions & 48 deletions lib/commands/lint.js
@@ -1,8 +1,6 @@
'use strict';

var inquirer = require('inquirer');
var async = require('async');
var child_process = require('child_process');

exports.usage = '代码质量检测';
exports.abbr = 'l';
Expand All @@ -16,58 +14,25 @@ exports.run = function (options) {
var project = this.project,
dir = options.d || options.dir;

var isGoingToContinue = true;

try {
require.resolve('eslint');
} catch (e) {
isGoingToContinue = false;

var questions = [{
type: 'confirm',
name: 'isGoingtoInstall',
message: 'lint plugin not installed yet, wounld you like to install it now?'
}];

inquirer.prompt(questions).then(function (answers) {
if (answers.isGoingtoInstall) {
if (!(process.getuid && process.getuid() === 0)) {
warn('安装权限不足, 请使用sudo执行 ykit lint');
process.exit(1);
}

var installCmd = 'npm i eslint@2.13.1 --registry https://registry.npm.taobao.org';
try {
log('intalling eslint...');
log(child_process.execSync(installCmd, { cwd: sysPath.resolve(__dirname, '../../'), encoding: 'utf8' }));
} catch (e) {
error(e);
}
}
});
}

var lintFuncs = [
// 暂时只 lint js
function (callback) {
project.lint(dir, callback);
}];

if (isGoingToContinue) {
async.series(lintFuncs, function (err, results) {
if (!err) {
if (results[0] && results[1]) {
success('All files complete without error.');
process.exit(0);
} else {
process.exit(1);
}
} else if (err === true) {
error('Lint Error');
process.exit(1);
async.series(lintFuncs, function (err, results) {
if (!err) {
if (results[0] && results[1]) {
success('All files complete without error.');
process.exit(0);
} else {
error(err);
process.exit(1);
}
});
}
} else if (err === true) {
error('Lint Error');
process.exit(1);
} else {
error(err);
}
});
};
15 changes: 7 additions & 8 deletions lib/config/initTmpl/ykit.common.js
@@ -1,10 +1,9 @@
exports.config = function() {
'use strict';

exports.config = function () {
return {
export: [
'./scripts/index.js',
'./styles/index.scss'
],
modifyWebpackConfig: function(baseConfig) {
export: ['./scripts/index.js', './styles/index.scss'],
modifyWebpackConfig: function modifyWebpackConfig(baseConfig) {
// 修改 webpack 编译配置
// ...

Expand All @@ -18,8 +17,8 @@ exports.config = function() {
name: '#_name_cmd',
module: {
usage: '项目自定义命令',
run: function() {}
run: function run() {}
}
}]
};
};
};
8 changes: 0 additions & 8 deletions lib/config/initTmpl/ykit.fekit.js

This file was deleted.

1 change: 0 additions & 1 deletion package.json
Expand Up @@ -29,7 +29,6 @@
"extract-text-webpack-plugin": "^1.0.1",
"globby": "^5.0.0",
"html-loader": "^0.4.3",
"inquirer": "1.1.1",
"jerryproxy": "^1.0.68",
"js-yaml": "^3.6.1",
"json-loader": "^0.5.4",
Expand Down
105 changes: 32 additions & 73 deletions src/commands/init.js
@@ -1,15 +1,16 @@
'use strict';

const execSync = require('child_process').execSync;
const replaceStream = require('replacestream');
const inquirer = require('inquirer');
const Manager = require('../modules/manager.js');

exports.usage = '项目初始化';
exports.abbr = 'i';

exports.setOptions = () => {
optimist.alias('l', 'lint');
optimist.describe('l', '先进行验证');
};

exports.run = function (options) {
Manager.reloadRC();

Expand All @@ -23,86 +24,44 @@ exports.run = function (options) {
defaultName = sysPath.basename(cwd);
}

const questions = [
{
type: 'input',
name: 'name',
message: 'project name(' + defaultName + '):'
}, {
type: 'list',
name: 'type',
message: 'project type:',
choices: [
{
name: 'qunar - 支持sass/less,实现资源带版本号,fekit_moudles打包,sync命令等',
value: 'qunar'
}, {
name: 'fekit - 主要用于fekit项目迁移,兼容fekit配置和模块化语法等',
value: 'fekit'
}, {
name: 'hy - 支持es6,更多功能仍在开发中',
value: 'hy'
}, {
name: 'basic - 默认基础配置',
value: 'basic'
}
]
}
];

inquirer.prompt(questions).then((answers) => {
answers.name = answers.name || defaultName;
// TODO
const proName = defaultName;

const initTmplPath = sysPath.resolve(__dirname, '../config/initTmpl/');
let writePackageJsonStream;

// 如果没有package.json,先添加package.json
if (!fileExists(packageJsonPath)) {
writePackageJsonStream = createPackageJson();
}

if (!writePackageJsonStream) {
createConfigFile(answers.type);
installDependencies(answers.type);
} else {
writePackageJsonStream.on('finish', () => {
log('Successfully created package.json file in ' + cwd);

createConfigFile(answers.type);
installDependencies(answers.type);
});
}
const initTmplPath = sysPath.resolve(__dirname, '../config/initTmpl/');
let writePackageJsonStream;

function createPackageJson() {
return fs.createReadStream(sysPath.resolve(initTmplPath, 'package.json')).pipe(replaceStream('#_name', answers.name)).pipe(fs.createWriteStream(sysPath.resolve(cwd, 'package.json')));
}
// 如果没有package.json,先添加package.json
if (!fileExists(packageJsonPath)) {
writePackageJsonStream = createPackageJson();
}

function createConfigFile(configType) {
const configFileName = configType !== 'basic'
? 'ykit.' + configType + '.js'
: 'ykit.js';
if (!writePackageJsonStream) {
createConfigFile();
} else {
writePackageJsonStream.on('finish', () => {
log('Successfully created package.json file in ' + cwd);

if (!fileExists('./' + configFileName)) {
const stream = fs.createReadStream(sysPath.resolve(initTmplPath, configType !== 'fekit' ? 'ykit.common.js' : 'ykit.fekit.js')).pipe(replaceStream('#_name', answers.name)).pipe(fs.createWriteStream(sysPath.resolve(cwd, configFileName)));
createConfigFile();
});
}

stream.on('finish', () => {
log('Successfully created ' + configFileName + ' file in ' + cwd);
});
}
}
function createPackageJson() {
return fs.createReadStream(sysPath.resolve(initTmplPath, 'package.json')).pipe(replaceStream('#_name', proName)).pipe(fs.createWriteStream(sysPath.resolve(cwd, 'package.json')));
}

function installDependencies(configType) {
if (configType === 'basic') {
return;
}
function createConfigFile() {
const configFileName = 'ykit.js';

const packageName = 'ykit-config-' + configType,
installConfigPackageCmd = 'npm i --save-dev --registry http://registry.npm.corp.qunar.com/ @qnpm/ykit-config-' + configType;
if (!fileExists('./' + configFileName)) {
const writeStream = fs.createWriteStream(sysPath.resolve(cwd, configFileName));
const configFilePath = sysPath.resolve(initTmplPath, 'ykit.common.js');
const stream = fs.createReadStream(configFilePath).pipe(replaceStream('#_name', proName)).pipe(writeStream);

log('Installing ' + packageName + '...');
execSync(installConfigPackageCmd);
stream.on('finish', () => {
log('Successfully created ' + configFileName + ' file in ' + cwd);
});
}
});
}
};

function fileExists(filePath) {
Expand Down

0 comments on commit ab08750

Please sign in to comment.