Skip to content

Commit 88e9d46

Browse files
committed
feat: router & vuex
1 parent d0de715 commit 88e9d46

File tree

18 files changed

+220
-54
lines changed

18 files changed

+220
-54
lines changed

package.json

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,11 @@
66
],
77
"scripts": {
88
"test": "jest --env node",
9-
"lint": "eslint --fix packages/**/*.js packages/**/bin/* test/**/*.js"
9+
"posttest": "yarn clean",
10+
"lint": "eslint --fix packages/**/*.js packages/**/bin/* test/**/*.js",
11+
"clean": "node scripts/cleanTestDir.js",
12+
"sync": "node scripts/syncDeps.js",
13+
"boot": "node scripts/bootstrap.js"
1014
},
1115
"gitHooks": {
1216
"pre-commit": "lint-staged"

packages/@vue/cli-service/generator/index.js

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
module.exports = (generatorAPI, options) => {
2-
generatorAPI.render('./template')
3-
generatorAPI.extendPackage({
1+
module.exports = (api, options) => {
2+
api.render('./template')
3+
api.extendPackage({
44
scripts: {
55
'serve': 'vue-cli-service serve' + (
66
// only auto open browser on MacOS where applescript
@@ -28,4 +28,20 @@ module.exports = (generatorAPI, options) => {
2828
'not ie <= 8'
2929
]
3030
})
31+
32+
if (options.router) {
33+
api.extendPackage({
34+
dependencies: {
35+
'vue-router': '^3.0.1'
36+
}
37+
})
38+
}
39+
40+
if (options.vuex) {
41+
api.extendPackage({
42+
dependencies: {
43+
vuex: '^3.0.1'
44+
}
45+
})
46+
}
3147
}

packages/@vue/cli-service/generator/template/src/App.vue

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
<%_ if (!options.router) { _%>
12
<template>
23
<div id="app">
34
<img src="./assets/logo.png">
@@ -15,6 +16,17 @@ export default {
1516
}
1617
}
1718
</script>
19+
<%_ } else { _%>
20+
<template>
21+
<div id="app">
22+
<div id="nav">
23+
<router-link to="/">Home</router-link> |
24+
<router-link to="/about">About</router-link>
25+
</div>
26+
<router-view/>
27+
</div>
28+
</template>
29+
<%_ } _%>
1830

1931
<style>
2032
#app {
@@ -23,6 +35,23 @@ export default {
2335
-moz-osx-font-smoothing: grayscale;
2436
text-align: center;
2537
color: #2c3e50;
38+
<%_ if (!options.router) { _%>
2639
margin-top: 60px;
40+
<%_ } _%>
41+
}
42+
43+
<%_ if (options.router) { _%>
44+
#nav {
45+
padding: 30px;
46+
}
47+
48+
#nav a {
49+
font-weight: bold;
50+
color: #2c3e50;
51+
}
52+
53+
#nav a.router-link-exact-active {
54+
color: #42b983;
2755
}
56+
<%_ } _%>
2857
</style>
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,20 @@
11
import Vue from 'vue'
22
import App from './App.vue'
3+
<%_ if (options.router) { _%>
4+
import router from './router'
5+
<%_ } _%>
6+
<%_ if (options.vuex) { _%>
7+
import store from './store'
8+
<%_ } _%>
39

410
Vue.config.productionTip = false
511

612
new Vue({
13+
<%_ if (options.router) { _%>
14+
router,
15+
<%_ } _%>
16+
<%_ if (options.vuex) { _%>
17+
store,
18+
<%_ } _%>
719
render: h => h(App)
820
}).$mount('#app')
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
<%_ if (options.router) { _%>
2+
import Vue from 'vue'
3+
import Router from 'vue-router'
4+
import Home from './views/Home.vue'
5+
import About from './views/About.vue'
6+
7+
Vue.use(Router)
8+
9+
export default new Router({
10+
routes: [
11+
{
12+
path: '/',
13+
name: 'home',
14+
component: Home
15+
},
16+
{
17+
path: '/about',
18+
name: 'about',
19+
component: About
20+
}
21+
]
22+
})
23+
<%_ } _%>
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
<%_ if (options.vuex) { _%>
2+
import Vue from 'vue'
3+
import Vuex from 'vuex'
4+
5+
Vue.use(Vuex)
6+
7+
export default new Vuex.Store({
8+
state: {
9+
10+
},
11+
mutations: {
12+
13+
},
14+
actions: {
15+
16+
}
17+
})
18+
<%_ } _%>
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
<%_ if (options.router) { _%>
2+
<template>
3+
<div class="about">
4+
<h1>This is an about page</h1>
5+
</div>
6+
</template>
7+
<%_ } _%>
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
<%_ if (options.router) { _%>
2+
<template>
3+
<div class="home">
4+
<img src="../assets/logo.png">
5+
<HelloWorld msg="Welcome to Your Vue.js App"/>
6+
</div>
7+
</template>
8+
9+
<script>
10+
// @ is an alias to /src
11+
import HelloWorld from '@/components/HelloWorld.vue'
12+
13+
export default {
14+
name: 'home',
15+
components: {
16+
HelloWorld
17+
}
18+
}
19+
</script>
20+
<%_ } _%>

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,9 @@
5858
"yorkie": "^1.0.2"
5959
},
6060
"devDependencies": {
61-
"vue": "^2.5.13"
61+
"vue": "^2.5.13",
62+
"vue-router": "^3.0.1",
63+
"vuex": "^3.0.1"
6264
},
6365
"publishConfig": {
6466
"access": "public"

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

Lines changed: 7 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -59,19 +59,12 @@ test('save options (merge)', () => {
5959
bar: { b: 2 }
6060
}
6161
})
62+
})
6263

63-
// deep merge
64-
saveOptions({
65-
plugins: {
66-
foo: { a: 2, c: 3 },
67-
bar: { d: 4 }
68-
}
69-
}, true)
70-
expect(loadOptions()).toEqual({
71-
packageManager: 'yarn',
72-
plugins: {
73-
foo: { a: 2, c: 3 },
74-
bar: { b: 2, d: 4 }
75-
}
76-
})
64+
test('save options (replace)', () => {
65+
const toSave = {
66+
foo: 'bar'
67+
}
68+
saveOptions(toSave, true)
69+
expect(loadOptions()).toEqual(toSave)
7770
})

0 commit comments

Comments
 (0)