@beisen/bscpm
Version:
212 lines (171 loc) • 7.58 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
var _fs = require('fs');
var _fs2 = _interopRequireDefault(_fs);
var _yeomanGenerator = require('yeoman-generator');
var _yeomanGenerator2 = _interopRequireDefault(_yeomanGenerator);
var _requestPromise = require('request-promise');
var _requestPromise2 = _interopRequireDefault(_requestPromise);
var _execa = require('execa');
var _execa2 = _interopRequireDefault(_execa);
var _readPackage = require('../../../helpers/read-package');
var _readPackage2 = _interopRequireDefault(_readPackage);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
exports.default = class extends _yeomanGenerator2.default {
prompting() {
let { contextRoot } = this.options;
let packInfo = new _readPackage2.default(contextRoot).toJSON();
this.promptes = {};
this.needUpgrade = false;
this.hasStorybookLib = false;
this.hasStorybookLib15 = false;
this.hasBuild = false;
this.hasBuild15 = false;
let messages = [];
let devDeps = packInfo.devDependencies ? Object.keys(packInfo.devDependencies) : [];
if (devDeps.includes('@beisen/storybook-lib')) {
this.hasStorybookLib = true;
messages.push(`\n@beisen/storybook-lib@${packInfo.devDependencies['@beisen/storybook-lib']}`);
}
if (devDeps.includes('@beisen/storybook-lib-15')) {
this.hasStorybookLib15 = true;
messages.push(`\n@beisen/storybook-lib-15@${packInfo.devDependencies['@beisen/storybook-lib-15']}`);
}
// build模块小于 1.0.14 版本的为老版本
let buildVersion = '';
let buildVer = packInfo.devDependencies['@beisen/build'] || '9999';
if (buildVer === '1.x.x') {
buildVersion = 9999;
} else {
buildVersion = parseInt(buildVer.replace(/\.|\~|\^/g, ''));
}
if (devDeps.includes('@beisen/build') && buildVersion < 1014) {
// '1.0.14'
this.hasBuild = true;
messages.push(`\n@beisen/build@${packInfo.devDependencies['@beisen/build']}`);
}
if (devDeps.includes('@beisen/build-15')) {
this.hasBuild15 = true;
messages.push(`\n@beisen/build-15@${packInfo.devDependencies['@beisen/build-15']}`);
}
if (devDeps.join(',').match(/\@talentui\/cz-project-changelog/g)) {
messages.push(`\n@talentui/*`);
}
if (devDeps.join(',').match(/,webpack/g)) {
messages.push(`\nwebpack/*`);
}
if (messages.length) {
messages.unshift(`已监测到旧版本依赖:`);
this.needUpgrade = true;
} else {
messages.push(`未检测到需要更新的依赖`);
this.needUpgrade = true;
}
return this.prompt([{
'type': 'confirm',
'name': 'upgradeConfirm',
'message': messages.join(''),
'default': true
}, {
'type': 'list',
'name': 'reactVersion',
'message': '组件使用的 React 版本:',
'choices': ['16', '15'],
'when': answers => {
return this.needUpgrade;
}
}, {
'type': 'list',
'name': 'babelVersion',
'message': '组件使用的 Babel 版本:',
'choices': ['7', '6'],
'when': answers => {
return this.needUpgrade;
}
}, {
'type': 'confirm',
'name': 'autoInstall',
'message': '是否自动安装新的依赖(将会删除 node_modules 与 package-lock.json)',
'default': true,
'when': answers => {
return this.needUpgrade;
}
}]).then(promptes => {
this.promptes.upgradeConfirm = promptes.upgradeConfirm;
this.promptes.reactVersion = promptes.reactVersion;
this.promptes.babelVersion = promptes.babelVersion;
this.promptes.autoInstall = promptes.autoInstall;
});
}
writing() {
let { contextRoot } = this.options;
if (this.needUpgrade && this.promptes.upgradeConfirm) {
let packInfo = new _readPackage2.default(contextRoot).toJSON();
// 删除旧的依赖
if (this.hasStorybookLib) delete packInfo.devDependencies['@beisen/storybook-lib'];
if (this.hasStorybookLib15) delete packInfo.devDependencies['@beisen/storybook-lib-15'];
if (this.hasBuild) delete packInfo.devDependencies['@beisen/build'];
if (this.hasBuild15) delete packInfo.devDependencies['@beisen/build-15'];
if (!packInfo.devDependencies) packInfo.devDependencies = {};
if (!packInfo.peerDependencies) packInfo.peerDependencies = {};
// 删除 react
delete packInfo.devDependencies['react'];
delete packInfo.devDependencies['react-dom'];
delete packInfo.peerDependencies['react'];
delete packInfo.peerDependencies['react-dom'];
// 删除 旧的 italent 构建模块
delete packInfo.devDependencies['@talentui/cz-project-changelog'];
delete packInfo.devDependencies['@talentui/dll-react'];
delete packInfo.devDependencies['@talentui/get-babel-config'];
delete packInfo.devDependencies['@talentui/thunder-component-bootstrap'];
delete packInfo.devDependencies['@talentui/webpack-config'];
delete packInfo.devDependencies['@talentui/external-components-webpack-config'];
delete packInfo.devDependencies['@talentui/tools'];
// 删除 旧的 italent 需要的基础模块
delete packInfo.devDependencies['webpack'];
delete packInfo.devDependencies['webpack-bundle-analyzer'];
delete packInfo.devDependencies['webpack-cli'];
delete packInfo.devDependencies['webpack-merge'];
delete packInfo.devDependencies['gulp'];
delete packInfo.devDependencies['typescript'];
delete packInfo.devDependencies['webpack-dev-server'];
// 根据版本更新依赖
packInfo.devDependencies['@beisen/storybook'] = '1.x.x';
packInfo.devDependencies['@beisen/build'] = '1.x.x';
packInfo.devDependencies['@beisen/webpack'] = '4.x.x';
packInfo.devDependencies['@beisen/ts'] = '1.x.x';
packInfo.devDependencies['@beisen/storybook-react'] = this.promptes.reactVersion === '15' ? '3.x.x' : '4.x.x';
packInfo.devDependencies['@beisen/babel'] = this.promptes.babelVersion === '7' ? '7.x.x' : '6.x.x';
// 添加 italentui 工具
packInfo.devDependencies['@beisen/italent-thunder'] = '1.x.x';
// 写入 react
let reactStackVersion = this.promptes.reactVersion === '15' ? '15.x.x' : '16.x.x';
packInfo.devDependencies['react'] = reactStackVersion;
packInfo.peerDependencies['react'] = reactStackVersion;
packInfo.devDependencies['react-dom'] = reactStackVersion;
packInfo.peerDependencies['react-dom'] = reactStackVersion;
// 调整命令
if (!packInfo.scripts) packInfo.scripts = {};
packInfo.scripts['lib'] = 'stl build lib';
packInfo.scripts['examples'] = 'sbl start --port 9001';
// thunder 任务
packInfo.scripts['start'] = 'italent-thunder start';
packInfo.scripts['build'] = 'italent-thunder build prod --mode development';
packInfo.scripts['build-prod'] = 'italent-thunder build prod';
_fs2.default.writeFileSync(`${contextRoot}/package.json`, JSON.stringify(packInfo, null, 2));
console.log(`${contextRoot}/package.json 已更新完毕`);
}
}
install() {
if (this.promptes.autoInstall) {
console.log(`正在清空当前组件安装的所有依赖包...`);
// 删除当前的安装包
_execa2.default.sync('rm', ['-rf', 'node_modules', 'package-lock.json']);
console.log(`已清空`);
this.npmInstall();
}
}
};
module.exports = exports['default'];