Skip to content

Commit b1772ca

Browse files
authored
feat: allow choosing vue version on creation (and in presets) (#5637)
1 parent 7c2a36b commit b1772ca

File tree

57 files changed

+3431
-3969
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

57 files changed

+3431
-3969
lines changed

.eslintignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
node_modules
22
template
3+
template-vue3
34
packages/test
45
temp
56
entry-wc.js

package.json

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,6 @@
9191
},
9292
"resolutions": {
9393
"puppeteer": "1.11.0",
94-
"vue": "^2.6.11",
9594
"vue-template-compiler": "^2.6.11",
9695
"vue-server-renderer": "^2.6.11"
9796
}

packages/@vue/babel-preset-app/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ Use this option when you have 3rd party dependencies that are not processed by B
8888

8989
- Default: `true`.
9090

91-
Set to `false` to disable JSX support. Or you can toggle [@vue/babel-preset-jsx](https://github.com/vuejs/jsx/tree/dev/packages/babel-preset-jsx) features here.
91+
Set to `false` to disable JSX support. Or you can toggle [@vue/babel-preset-jsx](https://github.com/vuejs/jsx/tree/dev/packages/babel-preset-jsx) (or [@ant-design-vue/babel-plugin-jsx](https://github.com/vueComponent/jsx) for Vue 3 projects) features here.
9292

9393
### loose
9494

packages/@vue/babel-preset-app/index.js

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,22 @@ module.exports = (context, options = {}) => {
112112

113113
// JSX
114114
if (options.jsx !== false) {
115-
presets.push([require('@vue/babel-preset-jsx'), typeof options.jsx === 'object' ? options.jsx : {}])
115+
let jsxOptions = {}
116+
if (typeof options.jsx === 'object') {
117+
jsxOptions = options.jsx
118+
}
119+
120+
let vueVersion = 2
121+
try {
122+
const Vue = require('vue')
123+
vueVersion = semver.major(Vue.version)
124+
} catch (e) {}
125+
126+
if (vueVersion === 2) {
127+
presets.push([require('@vue/babel-preset-jsx'), jsxOptions])
128+
} else if (vueVersion === 3) {
129+
plugins.push([require('@ant-design-vue/babel-plugin-jsx'), jsxOptions])
130+
}
116131
}
117132

118133
const runtimePath = path.dirname(require.resolve('@babel/runtime/package.json'))

packages/@vue/babel-preset-app/package.json

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
},
2323
"homepage": "https://github.com/vuejs/vue-cli/tree/dev/packages/@vue/babel-preset-app#readme",
2424
"dependencies": {
25+
"@ant-design-vue/babel-plugin-jsx": "^1.0.0-0",
2526
"@babel/core": "^7.9.6",
2627
"@babel/helper-compilation-targets": "^7.9.6",
2728
"@babel/helper-module-imports": "^7.8.3",
@@ -40,11 +41,15 @@
4041
},
4142
"peerDependencies": {
4243
"@babel/core": "*",
43-
"core-js": "^3"
44+
"core-js": "^3",
45+
"vue": "^2 || ^3.0.0-0"
4446
},
4547
"peerDependenciesMeta": {
4648
"core-js": {
4749
"optional": true
50+
},
51+
"vue": {
52+
"optional": true
4853
}
4954
}
5055
}

packages/@vue/cli-plugin-babel/__tests__/babelMigrator.spec.js

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,6 @@ const create = require('@vue/cli-test-utils/createUpgradableProject')
22
const { logs } = require('@vue/cli-shared-utils')
33

44
jest.setTimeout(300000)
5-
beforeEach(() => {
6-
process.env.VUE_CLI_TEST_DO_INSTALL_PLUGIN = true
7-
})
85

96
test('upgrade: plugin-babel v3.5', async () => {
107
const project = await create('plugin-babel-legacy', {

packages/@vue/cli-plugin-babel/__tests__/transpileDependencies.spec.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,11 @@ beforeAll(async () => {
6363
)
6464
})
6565

66+
afterAll(async () => {
67+
// avoid the non-existent made-up deps interfere with other tests
68+
await project.rm('package.json')
69+
})
70+
6671
test('dep from node_modules should not been transpiled', async () => {
6772
await project.run('vue-cli-service build')
6873
expect(await readVendorFile()).toMatch('() => "__TEST__"')

packages/@vue/cli-plugin-eslint/__tests__/eslintMigrator.spec.js

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,6 @@
11
jest.setTimeout(300000)
22
jest.mock('inquirer')
33

4-
beforeEach(() => {
5-
process.env.VUE_CLI_TEST_DO_INSTALL_PLUGIN = true
6-
})
7-
84
const create = require('@vue/cli-test-utils/createUpgradableProject')
95
const { expectPrompts } = require('inquirer')
106

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
jest.setTimeout(300000)
2+
3+
const generateWithPlugin = require('@vue/cli-test-utils/generateWithPlugin')
4+
const createOutside = require('@vue/cli-test-utils/createUpgradableProject')
5+
6+
test('Vue 3 base', async () => {
7+
const { pkg } = await generateWithPlugin([
8+
{
9+
id: '@vue/cli-service',
10+
apply: require('@vue/cli-service/generator'),
11+
options: {
12+
vueVersion: '3'
13+
}
14+
},
15+
{
16+
id: '@vue/cli-plugineslint',
17+
apply: require('../generator'),
18+
options: {}
19+
}
20+
])
21+
22+
expect(pkg.scripts.lint).toBeTruthy()
23+
expect(pkg.eslintConfig.extends).toEqual([
24+
'plugin:vue/vue3-essential', 'eslint:recommended'
25+
])
26+
})
27+
28+
test('Should allow fragments in Vue 3 projects', async () => {
29+
const { write, run } = await createOutside('eslint-vue3-fragment', {
30+
vueVersion: '3',
31+
plugins: {
32+
'@vue/cli-plugin-eslint': {}
33+
}
34+
})
35+
await write('src/App.vue', `<template>
36+
<img alt="Vue logo" src="./assets/logo.png">
37+
<HelloWorld msg="Welcome to Your Vue.js App"/>
38+
</template>
39+
40+
<script>
41+
import HelloWorld from './components/HelloWorld.vue'
42+
43+
export default {
44+
name: 'App',
45+
components: {
46+
HelloWorld
47+
}
48+
}
49+
</script>
50+
`)
51+
52+
await run('vue-cli-service lint')
53+
})

0 commit comments

Comments
 (0)