Spaces:
Sleeping
Sleeping
| const inquirer = require('inquirer') | |
| const { semver } = require('@vue/cli-shared-utils') | |
| module.exports = async (api) => { | |
| const pkg = require(api.resolve('package.json')) | |
| let localESLintRange = pkg.devDependencies.eslint | |
| // if project is scaffolded by Vue CLI 3.0.x or earlier, | |
| // the ESLint dependency (ESLint v4) is inside @vue/cli-plugin-eslint; | |
| // in Vue CLI v4 it should be extracted to the project dependency list. | |
| if (api.fromVersion('^3') && !localESLintRange) { | |
| localESLintRange = '^4.19.1' | |
| api.extendPackage({ | |
| devDependencies: { | |
| eslint: localESLintRange, | |
| 'babel-eslint': '^8.2.5', | |
| 'eslint-plugin-vue': '^4.5.0' | |
| } | |
| }) | |
| } | |
| const localESLintMajor = semver.major( | |
| semver.maxSatisfying(['4.99.0', '5.99.0', '6.99.0', '7.99.0'], localESLintRange) || | |
| // in case the user does not specify a typical caret range; | |
| // it is used as **fallback** because the user may have not previously | |
| // installed eslint yet, such as in the case that they are from v3.0.x | |
| require('eslint/package.json').version | |
| ) | |
| if (localESLintMajor >= 6) { | |
| return | |
| } | |
| const { confirmUpgrade } = await inquirer.prompt([{ | |
| name: 'confirmUpgrade', | |
| type: 'confirm', | |
| message: | |
| `Your current ESLint version is v${localESLintMajor}.\n` + | |
| `The latest major version which supported by vue-cli is v6.\n` + | |
| `Do you want to upgrade? (May contain breaking changes)\n` | |
| }]) | |
| if (confirmUpgrade) { | |
| const { getDeps } = require('../eslintDeps') | |
| const newDeps = getDeps(api) | |
| if (pkg.devDependencies['@vue/eslint-config-airbnb']) { | |
| Object.assign(newDeps, getDeps(api, 'airbnb')) | |
| } | |
| if (pkg.devDependencies['@vue/eslint-config-standard']) { | |
| Object.assign(newDeps, getDeps(api, 'standard')) | |
| } | |
| if (pkg.devDependencies['@vue/eslint-config-prettier']) { | |
| Object.assign(newDeps, getDeps(api, 'prettier')) | |
| } | |
| api.extendPackage({ devDependencies: newDeps }, { warnIncompatibleVersions: false }) | |
| // in case anyone's upgrading from the legacy `typescript-eslint-parser` | |
| if (api.hasPlugin('typescript')) { | |
| api.extendPackage({ | |
| eslintConfig: { | |
| parserOptions: { | |
| parser: '@typescript-eslint/parser' | |
| } | |
| } | |
| }) | |
| } | |
| // TODO: | |
| // transform `@vue/prettier` to `eslint:recommended` + `@vue/prettier` | |
| // transform `@vue/typescript` to `@vue/typescript/recommended` and also fix prettier compatibility for it | |
| } | |
| } | |