vue结合webpack4使用vue-router

674 阅读2分钟

练习项目最终目录结构

总共用到的依赖,终端执行命令

cnpm i vue vue-router vue-loader vue-template-compiler webpack webpack-cli html-webpack-plugin -D

webpack.config.js配置

const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const VueLoaderPlugin = require('vue-loader/lib/plugin');

module.exports = {
	entry:'./src/main.js',
	output: {
		filename: 'bundle.js',
		path: path.resolve(__dirname, 'dist')
	},
	devServer: {
		port: 3000,
		contentBase: './dist',
		progress: true
	},
	mode: 'development',

	plugins: [
		new HtmlWebpackPlugin({
			title: 'webpack4-vue-router', // 生成的HTML文件的标题
			template: './src/index.html' // 使用的模板路径
		}),
		        new VueLoaderPlugin()
	],
	module: {
		rules: [{
			test: /\.vue$/,
			use: [
				'vue-loader'
			]
		}]
	}

}

package.json配置

{
  "name": "webpack4-vue-router",
  "version": "1.0.0",
  "description": "",
  "main": "main.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "build": "webpack --config webpack.config.js",
    "start": "webpack-dev-server --open"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "devDependencies": {
    "html-webpack-plugin": "^3.2.0",
    "vue": "^2.6.10",
    "vue-loader": "^15.7.1",
    "vue-router": "^3.1.2",
    "vue-template-compiler": "^2.6.10",
    "webpack": "^4.39.2",
    "webpack-cli": "^3.3.7"
  },
  "dependencies": {
    "vue": "^2.6.10"
  }
}

main.js

import Vue from 'vue'
import VueRouter from 'vue-router'
Vue.use(VueRouter)
import app from './app.vue'
import goods from './main/goods.vue'
import account from './main/account.vue'
import login from './subcom/login.vue'
import register from './subcom/register.vue'


var router=new VueRouter({
	routes:[
		{path:'/account',component:account,
		children:[
			{path:'/login',component:login},
			{path:'/register',component:register}
		]
		},
		{path:'/goods',component:goods}
	]
})

var vm =new Vue({
	el:'#app',
	render:c=>c(app),
	router
})

index.html

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<body>
		<div id="app">
		</div>
	</body>
</html>

app.vue

<template>
	<div>
		<h1>这是app组件</h1>
		<router-link to="/account">Account</router-link>
		<router-link to="/goods">Goods</router-link>
		<router-view></router-view>
	</div>
</template>

<script>
</script>

<style>
</style>

account.vue

<template>
	<div>
		<h2>这是account组件</h2>
		<router-link to="/login">登录</router-link>
		<router-link to="/register">注册</router-link>
		<router-view></router-view>
	</div>
</template>
<script>
</script>

<style>
</style>

goods.vue

<template>
	<div>
		<h2>这是goods组件</h2>
	</div>
</template>

<script>
</script>

<style>
</style>

login.vue

<template>
	<div>
		<h3>这是Account登录子组件</h3>
	</div>
</template>

<script>
</script>

<style>
</style>

register

<template>
	<div>
		<h3>这是Account注册子组件</h3>
	</div>
</template>

<script>
</script>

<style>
</style>

终端运行

cnpm run start

运行结果

抽离路由

在src下创建router.js,将main.js的部分代码复制和剪切到router.js

main.js

import Vue from 'vue'
import VueRouter from 'vue-router'
Vue.use(VueRouter)
import app from './app.vue'
import router from './router.js'

var vm =new Vue({
	el:'#app',
	render:c=>c(app),
	router
})

router.js

import VueRouter from 'vue-router'
import goods from './main/goods.vue'
import account from './main/account.vue'
import login from './subcom/login.vue'
import register from './subcom/register.vue'

var router=new VueRouter({
	routes:[
		{path:'/account',component:account,
		children:[
			{path:'/login',component:login},
			{path:'/register',component:register}
		]
		},
		{path:'/goods',component:goods}
	]
})

export default router

个人网站:www.panbingwen.cn