Skip to content

Commit 74fae44

Browse files
authored
feat: implement a migrator to auto add eslint to deps (#4549)
1 parent b799b83 commit 74fae44

File tree

2 files changed

+50
-4
lines changed

2 files changed

+50
-4
lines changed
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
module.exports = (api) => {
2+
// if project is scaffolded by Vue CLI 3.0.x or earlier,
3+
// the ESLint dependency (ESLint v4) is inside @vue/cli-plugin-eslint;
4+
// in Vue CLI v4 it should be extracted to the project dependency list.
5+
if (api.fromVersion('^3')) {
6+
const pkg = require(api.resolve('package.json'))
7+
const hasESLint = [
8+
'dependencies',
9+
'devDependencies',
10+
'peerDependencies',
11+
'optionalDependencies'
12+
].some(depType =>
13+
Object.keys(pkg[depType] || {}).includes('eslint')
14+
)
15+
16+
if (!hasESLint) {
17+
api.extendPackage({
18+
devDependencies: {
19+
eslint: '^4.19.1'
20+
}
21+
})
22+
}
23+
24+
// TODO: add a prompt for users to optionally upgrade their eslint configs to a new major version
25+
}
26+
}

packages/@vue/cli/__tests__/Upgrader.spec.js

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,11 @@ beforeAll(() => {
1515
}
1616
})
1717

18-
test('upgrade: plugin-babel v3.5', async () => {
18+
beforeEach(() => {
1919
process.env.VUE_CLI_TEST_DO_INSTALL_PLUGIN = true
20+
})
21+
22+
test('upgrade: plugin-babel v3.5', async () => {
2023
const project = await create('plugin-babel-legacy', {
2124
plugins: {
2225
'@vue/cli-plugin-babel': {
@@ -28,7 +31,7 @@ test('upgrade: plugin-babel v3.5', async () => {
2831
const pkg = JSON.parse(await project.read('package.json'))
2932
expect(pkg.dependencies).not.toHaveProperty('core-js')
3033

31-
await (new Upgrader(project.dir)).upgrade('@vue/babel', {})
34+
await (new Upgrader(project.dir)).upgrade('babel', {})
3235

3336
const updatedPkg = JSON.parse(await project.read('package.json'))
3437
expect(updatedPkg.dependencies).toHaveProperty('core-js')
@@ -40,7 +43,6 @@ test('upgrade: plugin-babel v3.5', async () => {
4043
})
4144

4245
test('upgrade: plugin-babel with core-js 2', async () => {
43-
process.env.VUE_CLI_TEST_DO_INSTALL_PLUGIN = true
4446
const project = await create('plugin-babel-v3', {
4547
plugins: {
4648
'@vue/cli-plugin-babel': {
@@ -52,8 +54,26 @@ test('upgrade: plugin-babel with core-js 2', async () => {
5254
const pkg = JSON.parse(await project.read('package.json'))
5355
expect(pkg.dependencies['core-js']).toMatch('^2')
5456

55-
await (new Upgrader(project.dir)).upgrade('@vue/babel', {})
57+
await (new Upgrader(project.dir)).upgrade('babel', {})
5658

5759
const updatedPkg = JSON.parse(await project.read('package.json'))
5860
expect(updatedPkg.dependencies['core-js']).toMatch('^3')
5961
})
62+
63+
test('upgrade: should add eslint to devDependencies', async () => {
64+
const project = await create('plugin-eslint-v3.0', {
65+
plugins: {
66+
'@vue/cli-plugin-eslint': {
67+
version: '3.0.0'
68+
}
69+
}
70+
}, outsideTestFolder)
71+
72+
const pkg = JSON.parse(await project.read('package.json'))
73+
expect(pkg.devDependencies).not.toHaveProperty('eslint')
74+
75+
await (new Upgrader(project.dir)).upgrade('eslint', {})
76+
77+
const updatedPkg = JSON.parse(await project.read('package.json'))
78+
expect(updatedPkg.devDependencies.eslint).toMatch('^4')
79+
})

0 commit comments

Comments
 (0)