Skip to content

Commit 746540b

Browse files
authored
refactor: sub-package eslint maintance (vuejs#6078)
using eslint@7 and @babel/eslint-parser in sub-package
1 parent 8230aa3 commit 746540b

File tree

12 files changed

+146
-94
lines changed

12 files changed

+146
-94
lines changed

.eslintrc.js

+12-12
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,33 @@
11
module.exports = {
22
extends: [
3-
"plugin:vue-libs/recommended"
3+
'plugin:vue-libs/recommended'
44
],
55
plugins: [
6-
"node"
6+
'node'
77
],
88
env: {
9-
"jest": true
9+
'jest': true
1010
},
1111
globals: {
1212
name: 'off'
1313
},
1414
rules: {
15-
"indent": ["error", 2, {
16-
"MemberExpression": "off"
15+
'indent': ['error', 2, {
16+
'MemberExpression': 'off'
1717
}],
18-
"no-shadow": ["error"],
19-
"node/no-extraneous-require": ["error", {
20-
"allowModules": [
21-
"@vue/cli-service",
22-
"@vue/cli-test-utils"
18+
'no-shadow': ['error'],
19+
'node/no-extraneous-require': ['error', {
20+
'allowModules': [
21+
'@vue/cli-service',
22+
'@vue/cli-test-utils'
2323
]
2424
}]
2525
},
2626
overrides: [
2727
{
28-
files: ['**/__tests__/**/*.js', "**/cli-test-utils/**/*.js"],
28+
files: ['**/__tests__/**/*.js', '**/cli-test-utils/**/*.js'],
2929
rules: {
30-
"node/no-extraneous-require": "off"
30+
'node/no-extraneous-require': 'off'
3131
}
3232
}
3333
]

packages/@vue/cli-service-global/__tests__/entry.vue

+3-3
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,9 @@
33
</template>
44

55
<script>
6-
export default {
7-
data: () => ({ msg: 'hi' })
8-
}
6+
export default {
7+
data: () => ({ msg: 'hi' })
8+
}
99
</script>
1010

1111
<style>

packages/@vue/cli-service-global/__tests__/globalService.spec.js

+22
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,28 @@ test('global serve', async () => {
5353
)
5454
})
5555

56+
test('global serve with eslint', async () => {
57+
try {
58+
await serve(
59+
() => execa(binPath, ['serve', 'foo.js'], { cwd }),
60+
async ({ page, nextUpdate, helpers }) => {
61+
expect(await helpers.getText('h1')).toMatch('hi')
62+
63+
write('foo.js', entryJs.replace(`$mount('#app')`, `$mount('#app');`))
64+
const data = await nextUpdate()
65+
expect(data).toMatch('App updated')
66+
67+
write('foo.js', entryJs.replace(`$mount('#app')`, `$mount('#app');;`))
68+
await nextUpdate()
69+
}
70+
)
71+
} catch (err) {
72+
// Failed because of no-extra-semi
73+
expect(err).toMatch('Failed to compile with 1 errors')
74+
}
75+
expect.assertions(3)
76+
})
77+
5678
let server, browser, page
5779
test('global build', async () => {
5880
const { stdout } = await execa(binPath, ['build', 'foo.js'], { cwd })

packages/@vue/cli-service-global/lib/globalConfigPlugin.js

+9-2
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,19 @@
11
const path = require('path')
22
const resolve = require('resolve')
33
const { findExisting } = require('./util')
4+
const { loadPartialConfigSync } = require('@babel/core')
45

56
module.exports = function createConfigPlugin (context, entry, asLib) {
67
return {
78
id: '@vue/cli-service-global-config',
89
apply: (api, options) => {
10+
const _entry = path.resolve(context, entry)
911
api.chainWebpack(config => {
1012
// entry is *.vue file, create alias for built-in js entry
1113
if (/\.vue$/.test(entry)) {
1214
config.resolve
1315
.alias
14-
.set('~entry', path.resolve(context, entry))
16+
.set('~entry', _entry)
1517
entry = require.resolve('../template/main.js')
1618
} else {
1719
// make sure entry is relative
@@ -93,6 +95,9 @@ module.exports = function createConfigPlugin (context, entry, asLib) {
9395
? !!(require(path.join(context, 'package.json')).eslintConfig)
9496
: !!ESLintConfigFile
9597

98+
const babelConfig = loadPartialConfigSync({ filename: _entry })
99+
const hasBabelConfig = !!babelConfig && babelConfig.hasFilesystemConfig()
100+
96101
// set inline eslint options
97102
config.module
98103
.rule('eslint')
@@ -111,7 +116,9 @@ module.exports = function createConfigPlugin (context, entry, asLib) {
111116
'eslint:recommended'
112117
],
113118
parserOptions: {
114-
parser: 'babel-eslint'
119+
parser: '@babel/eslint-parser',
120+
requireConfigFile: hasBabelConfig,
121+
babelOptions
115122
},
116123
rules: {
117124
'no-console': process.env.NODE_ENV === 'production' ? 'warn' : 'off',

packages/@vue/cli-service-global/package.json

+3-2
Original file line numberDiff line numberDiff line change
@@ -22,13 +22,14 @@
2222
},
2323
"homepage": "https://github.com/vuejs/vue-cli/tree/dev/packages/@vue/cli-service-global#readme",
2424
"dependencies": {
25+
"@babel/core": "^7.12.3",
26+
"@babel/eslint-parser": "^7.12.1",
2527
"@vue/cli-plugin-babel": "^4.5.8",
2628
"@vue/cli-plugin-eslint": "^4.5.8",
2729
"@vue/cli-service": "^4.5.8",
28-
"babel-eslint": "^10.1.0",
2930
"chalk": "^4.1.0",
3031
"core-js": "^3.6.5",
31-
"eslint": "^6.7.2",
32+
"eslint": "^7.13.0",
3233
"eslint-plugin-vue": "^6.2.2",
3334
"regenerator-runtime": "^0.13.5",
3435
"resolve": "^1.17.0",

packages/@vue/cli-ui-addon-webpack/.eslintrc.js

+6
Original file line numberDiff line numberDiff line change
@@ -9,5 +9,11 @@ module.exports = {
99
mapSharedData: false,
1010
Vue: false,
1111
name: 'off'
12+
},
13+
parserOptions: {
14+
parser: '@babel/eslint-parser',
15+
babelOptions: {
16+
cwd: __dirname
17+
}
1218
}
1319
}

packages/@vue/cli-ui-addon-webpack/package.json

+3-1
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,14 @@
1818
},
1919
"license": "MIT",
2020
"devDependencies": {
21+
"@babel/core": "^7.12.3",
22+
"@babel/eslint-parser": "^7.12.1",
2123
"@vue/cli-plugin-babel": "^4.5.8",
2224
"@vue/cli-plugin-eslint": "^4.5.8",
2325
"@vue/cli-service": "^4.5.8",
2426
"@vue/eslint-config-standard": "^5.1.2",
2527
"core-js": "^3.6.5",
26-
"eslint": "^6.7.2",
28+
"eslint": "^7.13.0",
2729
"eslint-plugin-import": "^2.20.2",
2830
"eslint-plugin-node": "^11.1.0",
2931
"eslint-plugin-promise": "^4.2.1",

packages/@vue/cli-ui-addon-widgets/.eslintrc.js

+4-1
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,10 @@ module.exports = {
1212
'no-debugger': process.env.NODE_ENV === 'production' ? 'warn' : 'off'
1313
},
1414
parserOptions: {
15-
parser: 'babel-eslint'
15+
parser: '@babel/eslint-parser',
16+
babelOptions: {
17+
cwd: __dirname
18+
}
1619
},
1720
globals: {
1821
ClientAddonApi: false,

packages/@vue/cli-ui-addon-widgets/package.json

+3-1
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,14 @@
1818
},
1919
"license": "MIT",
2020
"devDependencies": {
21+
"@babel/core": "^7.12.3",
22+
"@babel/eslint-parser": "^7.12.1",
2123
"@vue/cli-plugin-babel": "^4.5.8",
2224
"@vue/cli-plugin-eslint": "^4.5.8",
2325
"@vue/cli-service": "^4.5.8",
2426
"@vue/eslint-config-standard": "^5.1.2",
2527
"core-js": "^3.6.5",
26-
"eslint": "^6.7.2",
28+
"eslint": "^7.13.0",
2729
"eslint-plugin-import": "^2.20.2",
2830
"eslint-plugin-node": "^11.1.0",
2931
"eslint-plugin-promise": "^4.2.1",

packages/@vue/cli-ui/.eslintrc.js

+4-1
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,9 @@ module.exports = {
2323
},
2424

2525
parserOptions: {
26-
parser: 'babel-eslint'
26+
parser: '@babel/eslint-parser',
27+
babelOptions: {
28+
cwd: __dirname
29+
}
2730
}
2831
}

packages/@vue/cli-ui/package.json

+3-2
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,8 @@
6565
"watch": "^1.0.2"
6666
},
6767
"devDependencies": {
68+
"@babel/core": "^7.12.3",
69+
"@babel/eslint-parser": "^7.12.1",
6870
"@vue/cli-plugin-babel": "^4.5.8",
6971
"@vue/cli-plugin-e2e-cypress": "^4.5.8",
7072
"@vue/cli-plugin-eslint": "^4.5.8",
@@ -74,10 +76,9 @@
7476
"ansi_up": "^4.0.4",
7577
"apollo-client": "^2.6.10",
7678
"apollo-link": "^1.2.14",
77-
"babel-eslint": "^10.1.0",
7879
"core-js": "^3.6.5",
7980
"cross-env": "^7.0.2",
80-
"eslint": "^6.7.2",
81+
"eslint": "^7.13.0",
8182
"eslint-plugin-graphql": "^3.1.0",
8283
"eslint-plugin-import": "^2.20.2",
8384
"eslint-plugin-node": "^11.1.0",

0 commit comments

Comments
 (0)