Vue學習實踐筆記(六)

node的安裝教程:https://blog.csdn.net/FED_AF/article/details/105747632

一、結構

*/vue
    dist
        bundle.js(打包輸出的結果,無需手動配置)
    src
        js
        vue
            account.vue
            login.vue
            register.vue
            goodslist.vue
        index.html
        app.vue
        main.js
        router.js
    webpack.config.js
    package.json
    package-lock.json

二、操作

# 準備環境
*/vue> npm i webpack webpack-cli -g
*/vue> npm init -y
*/vue> npm i webpack webpack-cli -D
*/vue> npm i jquery -D
*/vue> npm i webpack-dev-server -D
*/vue> npm i html-webpack-plugin -D
*/vue> npm i html-loader -D
*/vue> npm i css-loader style-loader -D
*/vue> npm i url-loader -D
*/vue> npm i vue vue-loader vue-template-compiler vue-router -D

# 源代碼的打包構建
*/vue> npx webpack-dev-server

三、文件

*/vue/src/index.html


<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
</head>
<body>
	<div id="app"></div>
</body>
</html>

*/vue/src/app.vue

<template>
	<div>
		<p>使用Vue對象的render方法渲染組件{{ msg }}</p>
		<router-link to="/account">Account</router-link>
		<router-link to="/goodslist">Goodslist</router-link>
		<router-view></router-view>
	</div>
</template>
<script>
/*
	export default向外暴露的成員,可以使用任意的變量來接收
	在一個模塊中,export default只允許向外暴露1次
	在一個模塊中,可以同時使用export default和export向外暴露成員
	export可以向外暴露多個成員,只能使用{}的形式來接收,這種形式,叫做“按需導出”
	使用export暴露的成員,必須嚴格按照暴露的名稱接收,除非使用as重命名
	test.js:
	var info = {
		name: 'zs',
		age: 20
	}
	export default info
	export var title = '小星星'
	export var content = '哈哈哈'

	main.js:
	import abc {title, content as cnt} from './test.js'
	console.log(abc)
	console.log(title + cnt)
*/
	export default {
	data(){ // 注意:組件中的data必須是function
		return {
			msg: '123'
		}
	},
	methods: {
		show(){
			console.log('調用了login.vue中的show方法')
		}
	}
}
</script>

<style>

</style>

*/vue/src/account.vue

<template>
	<div>
		<p>實現router路由,這是account組件</p>
		<router-link to="/account/login">登錄</router-link>
		<router-link to="/account/register">註冊</router-link>
		<router-view></router-view>
	</div>
</template>

<script>
	
</script>

<style scoped>
div{
	color: yellow;
}
</style>

*/vue/src/login.vue

<template>
	<div>
		<p>實現router子路由,這是account的子組件login</p>
	</div>
</template>

<script>
	
</script>

<style scoped>
/* 
	推薦爲.vue文件中的style開啓scoped屬性
	scoped使style的css樣式只能用於當前的組件,可以使組件的樣式不相互污染
*/
div{
	color: red;
}
</style>

*/vue/src/register.vue

<template>
	<div>
		<p>實現router子路由,這是account的子組件register</p>
	</div>
</template>

<script>
	
</script>

<style scoped>

</style>

*/vue/src/goodslist.vue

<template>
	<div>
	<p>實現router路由,這是goodslist組件</p>
	</div>
</template>

<script>

</script>

<style scoped>

</style>

*/vue/src/main.js

// main.js作爲項目的入口文件


// 從es6開始支持下面這種導入方式
import $ from 'jquery'
import Vue from 'vue'
import VueRouter from 'vue-router'
import router from './router.js'
// 1.導入app組件
import app from './app.vue'
// webpack無法打包.vue文件,需要安裝相關的loader:vue-loader、vue-template-compiler
// 1.webpack能夠處理js文件之間的互相依賴關係;
// 2.webpack能夠處理js的兼容問題,把高級的、瀏覽器不識別的語法轉爲低級的、瀏覽器能正常識別的語法
// 手動安裝VueRouter
Vue.use(VueRouter)
$(function(){
	$('li:odd').css('background-color', 'cyan')
	$('li:even').css('background-color', function() {
		return '#' + 'D97634'
	})
})
var vm = new Vue({
	el: '#app',
	render: c => c(app),
	router
})

*/vue/src/router.js

import VueRouter from 'vue-router'
import account from './vue/account.vue'
import login from './vue/login.vue'
import register from './vue/register.vue'
import goodslist from './vue/goodslist.vue'
// 創建路由對象
var router = new VueRouter({
	routes: [ 
		{
			path: '/account',
			component: account,
			children: [
				{ path: 'login', component: login },
				{ path: 'register', component: register }
			]
		},
		{ path: '/goodslist', component: goodslist }
	]
})
// 把路由對象暴露出去
export default router

*/vue/webpack.config.js

const { resolve } = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const VueLoaderPlugin = require('vue-loader/lib/plugin');
module.exports = {
	// 入口:表示要使用webpack打包哪個文件
	entry: ['./src/main.js', './src/index.html'],
	output: {
		// 輸出文件名
		filename: 'bundle.js',
		// 輸出文件路徑
		path: resolve(__dirname, 'dist')
	},
	module: {
		rules: [
			{
				test: /\.html$/,
				loader: 'html-loader'
			},
			{
				test: /\.css$/,
				use: ['style-loader', 'css-loader']
			},
			{
				test: /\.(jpg|png|gif)$/,
				loader: 'url-loader',
				options: {
					limit: 1024 * 8,
					esModule: false
				}
			},
			{
				test: /\.vue$/,
				loader: 'vue-loader'
			},
			{
				exclude: /\.(html|css|js|jpg|png|gif|vue)$/,
				loader: 'file-loader',
				options: {
					name: '[hash:10].[ext]'
				}
			}
		]
	},
	plugins: [
		new HtmlWebpackPlugin({
			template: './src/index.html'
		}),
		new VueLoaderPlugin()
	],
	devServer: {
		contentBase: resolve(__dirname, 'dist'),
		compress: true,
		host: '0.0.0.0',
		hot: true,
		port: 3000
	},
	mode: 'development'
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章