Skip to content

Commit b6d1a70

Browse files
committed
feat: Support Quasar v2
1 parent 89f6e43 commit b6d1a70

File tree

13 files changed

+128
-160
lines changed

13 files changed

+128
-160
lines changed

Diff for: generator/index.js

+25-38
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
const fs = require('fs'),
2-
extendPluginOptions = require('../lib/extendPluginOptions')
1+
const fs = require('fs')
2+
const extendPluginOptions = require('../lib/extendPluginOptions')
33

44
const message = `
55
Documentation can be found at: https://quasar.dev
@@ -27,13 +27,13 @@ const plugins = []
2727

2828
module.exports = (api, opts) => {
2929
const
30-
quasarPath = api.resolve('./src/quasar.js'),
30+
quasarPath = api.resolve('./src/quasar-config.js'),
3131
tsPath = api.resolve('./src/main.ts'),
3232
jsPath = api.resolve('./src/main.js'),
3333
hasTS = fs.existsSync(tsPath)
3434

3535
const dependencies = {
36-
quasar: '^1.0.0',
36+
quasar: '^2.0.0-alpha.17',
3737
'@quasar/extras': '^1.0.0'
3838
}
3939

@@ -42,16 +42,10 @@ module.exports = (api, opts) => {
4242
devDependencies: {}
4343
}
4444

45-
if (opts.quasar.cssPreprocessor === 'styl') {
45+
if (['sass', 'scss'].includes(opts.quasar.cssPreprocessor)) {
4646
Object.assign(deps.devDependencies, {
47-
stylus: '^0.54.5',
48-
'stylus-loader': '^3.0.2'
49-
})
50-
}
51-
else if (['sass', 'scss'].includes(opts.quasar.cssPreprocessor)) {
52-
Object.assign(deps.devDependencies, {
53-
'node-sass': '^4.13.0',
54-
'sass-loader': '^8.0.0'
47+
'sass': '^1.29.0',
48+
'sass-loader': '^10.1.0'
5549
})
5650
}
5751

@@ -102,64 +96,56 @@ module.exports = (api, opts) => {
10296
}
10397

10498
api.onCreateComplete(() => {
105-
let lines = `import Vue from 'vue'\n`
99+
let qFileLines = ''
106100

107101
const
108102
hasIconSet = opts.quasar.iconSet !== 'material-icons',
109-
hasLang = opts.quasar.lang !== 'en-us'
103+
hasLang = opts.quasar.lang !== 'en-US'
110104

111105
if (!opts.quasar.features.includes(opts.quasar.iconSet)) {
112106
opts.quasar.features.push(opts.quasar.iconSet)
113107
}
114108

115109
if (opts.quasar.cssPreprocessor !== 'none') {
116-
lines += `\nimport './styles/quasar.${opts.quasar.cssPreprocessor}'`
110+
qFileLines += `\nimport './styles/quasar.${opts.quasar.cssPreprocessor}'`
117111
}
118112
else {
119-
lines += `\nimport 'quasar/dist/quasar.css'`
120-
}
121-
122-
if (opts.quasar.features.includes('ie')) {
123-
lines += `\nimport 'quasar/dist/quasar.ie.polyfills'`
113+
qFileLines += `\nimport 'quasar/dist/quasar.css'`
124114
}
125115

126116
if (hasIconSet) {
127117
const set = iconMap[opts.quasar.iconSet] || opts.quasar.iconSet
128-
lines += `\nimport iconSet from 'quasar/icon-set/${set}.js'`
118+
qFileLines += `\nimport iconSet from 'quasar/icon-set/${set}.js'`
129119
}
130120

131121
if (hasLang) {
132-
lines += `\nimport lang from 'quasar/lang/${opts.quasar.lang}.js'`
122+
qFileLines += `\nimport lang from 'quasar/lang/${opts.quasar.lang}.js'`
133123
}
134124

135125
opts.quasar.features
136-
.filter(feat => feat !== 'ie')
137126
.forEach(feat => {
138127
feat = iconMap[feat] || feat
139-
lines += `\nimport '@quasar/extras/${feat}/${feat}.css'`
128+
qFileLines += `\nimport '@quasar/extras/${feat}/${feat}.css'`
140129
})
141130

142-
// build import
143-
lines += `\nimport { Quasar } from 'quasar'`
144-
145131
// build Vue.use()
146-
lines += `\n\nVue.use(Quasar, {`
147-
lines += `\n config: {}`
132+
qFileLines += `\n\nexport default {`
133+
qFileLines += `\n config: {}`
148134

149-
lines += ',\n plugins: {'
135+
qFileLines += ',\n plugins: {'
150136
plugins.forEach(part => {
151-
lines += `\n ${part},`
137+
qFileLines += `\n ${part},`
152138
})
153-
lines += `\n }`
139+
qFileLines += `\n }`
154140

155141
if (hasLang) {
156-
lines += `,\n lang: lang`
142+
qFileLines += `,\n lang: lang`
157143
}
158144
if (hasIconSet) {
159-
lines += `,\n iconSet: iconSet`
145+
qFileLines += `,\n iconSet: iconSet`
160146
}
161147

162-
lines += `\n })`
148+
qFileLines += `\n}`
163149

164150
// Now inject additions to main.[js|ts]
165151
{
@@ -169,12 +155,13 @@ module.exports = (api, opts) => {
169155
const mainLines = content.split(/\r?\n/g).reverse()
170156

171157
const index = mainLines.findIndex(line => line.match(/^import/))
172-
mainLines[index] += `\nimport './quasar'`
158+
mainLines[index] += `\nimport { Quasar } from 'quasar'\nimport quasarConfig from './quasar-config'`
173159

174160
content = mainLines.reverse().join('\n')
161+
content = content.replace('createApp(App)', `createApp(App).use(Quasar, quasarConfig)`)
175162
fs.writeFileSync(mainPath, content, { encoding: 'utf8' })
176163

177-
fs.writeFileSync(quasarPath, lines, { encoding: 'utf8' })
164+
fs.writeFileSync(quasarPath, qFileLines, { encoding: 'utf8' })
178165
}
179166

180167
if (api.generator.hasPlugin('@vue/cli-plugin-eslint')) {

Diff for: generator/templates/styl/src/styles/quasar.styl

-3
This file was deleted.

Diff for: generator/templates/styl/src/styles/quasar.variables.styl

-15
This file was deleted.

Diff for: generator/templates/with-router-js/src/router.js

+24-22
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,30 @@
1-
import Vue from 'vue'
2-
import Router from 'vue-router'
1+
import { createRouter, createWebHistory } from 'vue-router'
32
import DefaultLayout from './layouts/Default.vue'
43
import Home from './views/Home.vue'
54
import About from './views/About.vue'
65

7-
Vue.use(Router)
6+
const routes = [
7+
{
8+
path: '/',
9+
component: DefaultLayout,
10+
children: [
11+
{
12+
path: '',
13+
name: 'home',
14+
component: Home
15+
},
16+
{
17+
path: '/about',
18+
name: 'about',
19+
component: About
20+
}
21+
]
22+
}
23+
]
824

9-
export default new Router({
10-
routes: [
11-
{
12-
path: '/',
13-
component: DefaultLayout,
14-
children: [
15-
{
16-
path: '',
17-
name: 'home',
18-
component: Home
19-
},
20-
{
21-
path: '/about',
22-
name: 'about',
23-
component: About
24-
}
25-
]
26-
}
27-
]
25+
const router = createRouter({
26+
history: createWebHistory(process.env.BASE_URL),
27+
routes
2828
})
29+
30+
export default router

Diff for: generator/templates/with-router-ts/src/router.ts

+24-22
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,30 @@
1-
import Vue from 'vue'
2-
import Router from 'vue-router'
1+
import { createRouter, createWebHistory, RouteRecordRaw } from 'vue-router'
32
import DefaultLayout from './layouts/Default.vue'
43
import Home from './views/Home.vue'
54
import About from './views/About.vue'
65

7-
Vue.use(Router)
6+
const routes: Array<RouteRecordRaw> = [
7+
{
8+
path: '/',
9+
component: DefaultLayout,
10+
children: [
11+
{
12+
path: '',
13+
name: 'home',
14+
component: Home
15+
},
16+
{
17+
path: '/about',
18+
name: 'about',
19+
component: About
20+
}
21+
]
22+
}
23+
]
824

9-
export default new Router({
10-
routes: [
11-
{
12-
path: '/',
13-
component: DefaultLayout,
14-
children: [
15-
{
16-
path: '',
17-
name: 'home',
18-
component: Home
19-
},
20-
{
21-
path: '/about',
22-
name: 'about',
23-
component: About
24-
}
25-
]
26-
}
27-
]
25+
const router = createRouter({
26+
history: createWebHistory(process.env.BASE_URL),
27+
routes
2828
})
29+
30+
export default router

Diff for: generator/templates/with-router/src/layouts/Default.vue

+5-3
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
v-model="leftDrawerOpen"
2424
show-if-above
2525
bordered
26-
content-class="bg-grey-2"
26+
class="bg-grey-2"
2727
>
2828
<q-list>
2929
<q-item-label header>Navigation</q-item-label>
@@ -100,12 +100,14 @@
100100
</template>
101101

102102
<script>
103+
import { ref } from 'vue'
104+
103105
export default {
104106
name: 'LayoutDefault',
105107
106-
data () {
108+
setup () {
107109
return {
108-
leftDrawerOpen: false
110+
leftDrawerOpen: ref(false)
109111
}
110112
}
111113
}

Diff for: generator/templates/without-router/src/App.vue

+4-6
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
v-model="leftDrawerOpen"
2424
show-if-above
2525
bordered
26-
content-class="bg-grey-2"
26+
class="bg-grey-2"
2727
>
2828
<q-list>
2929
<q-item-label header>Essential Links</q-item-label>
@@ -82,6 +82,7 @@
8282
</template>
8383

8484
<script>
85+
import { ref } from 'vue'
8586
import HelloWorld from './components/HelloWorld.vue'
8687
8788
export default {
@@ -91,13 +92,10 @@ export default {
9192
HelloWorld
9293
},
9394
94-
data () {
95+
setup () {
9596
return {
96-
leftDrawerOpen: false
97+
leftDrawerOpen: ref(false)
9798
}
9899
}
99100
}
100101
</script>
101-
102-
<style>
103-
</style>

Diff for: index.js

+19-6
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
const fs = require('fs')
22
const path = require('path')
3+
const webpack = require('webpack')
4+
5+
const getDevlandFile = require('./lib/get-devland-file')
6+
const { version } = getDevlandFile('quasar/package.json')
37

48
function getCssPreprocessor (api) {
59
return ['sass', 'scss', 'styl'].find(ext => {
@@ -36,27 +40,36 @@ module.exports = (api, options) => {
3640
`quasar/src/css/flex-addon.${srcCssExt}`
3741
)
3842

43+
chain.plugin('define-quasar')
44+
.use(webpack.DefinePlugin, [{
45+
__QUASAR_VERSION__: `'${version}'`,
46+
__QUASAR_SSR__: false,
47+
__QUASAR_SSR_SERVER__: false,
48+
__QUASAR_SSR_CLIENT__: false,
49+
__QUASAR_SSR_PWA__: false
50+
}])
51+
3952
chain.performance.maxEntrypointSize(512000)
4053

4154
const strategy = options.pluginOptions.quasar.importStrategy || 'kebab'
4255

4356
if (['kebab', 'pascal', 'combined'].includes(strategy)) {
4457
chain.module.rule('vue')
4558
.use('quasar-auto-import')
46-
.loader(path.join(__dirname, 'lib/loader.auto-import.js'))
59+
.loader(path.join(__dirname, 'lib/loader.vue-auto-import.js'))
4760
.options(strategy)
4861
.before('cache-loader')
62+
63+
chain.module.rule('transform-quasar-imports')
64+
.test(/\.(t|j)sx?$/)
65+
.use('transform-quasar-imports')
66+
.loader(path.join(__dirname, 'lib/loader.js-auto-import.js'))
4967
}
5068
else {
5169
console.error(`Incorrect setting for quasar > importStrategy (${strategy})`)
5270
console.error(`Use one of: 'kebab', 'pascal', 'combined'.`)
5371
console.log()
5472
process.exit(1)
5573
}
56-
57-
chain.module.rule('transform-quasar-imports')
58-
.test(/\.(t|j)sx?$/)
59-
.use('transform-quasar-imports')
60-
.loader(path.join(__dirname, 'lib/loader.transform-quasar-imports.js'))
6174
})
6275
}

0 commit comments

Comments
 (0)