123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293 |
- // 手动添加完插件后执行此脚本进行初始化动作
- const fs = require('fs-extra')
- // eslint-disable-next-line import/no-extraneous-dependencies
- const path = require('path')
- const chalk = require('chalk')
- const shell = require('shelljs')
- const inquirer = require('inquirer')
- const getAllPlugin = require('./lib/plugin-get-all')
- const semverValidate = require('./lib/semver-validate')
- const installDep = require('./lib/install-dep')
- const projectPackage = require('../package.json')
- const pluginsPath = path.resolve(__dirname, '../src/plugin')
- // 检测是否有插件文件夹
- if (!fs.existsSync(pluginsPath)) {
- console.log(chalk.red('未找到插件文件夹目录, 请确认 src 文件夹中是否有 plugins 目录'))
- process.exit(1)
- }
- const pluginList = getAllPlugin(pluginsPath)
- // 将数组 forEach 异步化
- async function asyncForEach(array, callback) {
- for (let index = 0; index < array.length; index++) {
- // eslint-disable-next-line
- await callback(array[index], index, array)
- }
- }
- // 监测 npm 是否已安装
- if (!shell.which('npm')) {
- console.log(chalk.red('检测到未安装 npm, 请先安装 npm 再重新执行, 查看: https://www.npmjs.com/get-npm'))
- process.exit(1)
- }
- async function handler() {
- const questions = [
- {
- type: 'checkbox',
- name: 'plugin',
- choices: pluginList.map(item => ({ name: item.name, value: item })),
- message: '请选择需要初始化的插件\n',
- },
- ]
- const { plugins } = await inquirer.prompt(questions)
- if (plugins.length === 0) {
- console.log('未选择需要初始化的插件')
- return
- }
- console.log(chalk.green(`开始初始化插件 ${plugins.map(item => item.name).join(', ')}`))
- await asyncForEach(plugins, async ({ name, packageCtx }) => {
- console.log(`* 插件 ${name}`)
- const keys = ['dependencies', 'devDependencies']
- let hasError = false
- await asyncForEach(keys, async key => {
- await asyncForEach(Object.keys(packageCtx[key]), async pkg => {
- const v1 = packageCtx[key][pkg]
- const v2 = projectPackage[key][pkg]
- if (v1 && v2) {
- if (!semverValidate(v1, v2)) {
- return
- }
- }
- try {
- await installDep(pkg, v1, projectPackage, key === 'devDependencies')
- } catch (e) {
- hasError = true
- console.log(chalk.red(e.message))
- }
- // const result = await installDep(pkg, v1, projectPackage, (key === 'devDependencies'))
- // if (result instanceof Error) {
- // hasError = true
- // console.log(chalk.red(result.message))
- // }
- })
- })
- if (hasError) {
- console.log(chalk.yellow('插件初始化结束, 但存在问题, 请手动解决'))
- }
- })
- }
- handler().then(() => {
- // eslint-disable-next-line
- require('./plugin-get-config')
- })
|