UNPKG

@beisen/bscpm

Version:
212 lines (171 loc) 7.58 kB
'use strict'; 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'];