webpack整合 vue-router
- 結構
- 各個文件內容,一共八個文件, 還有
src
components
目錄
Login.vue
<template>
<div>
<h2>我是登錄_Login.vue</h2>
</div>
</template>
<script></script>
<style></style>
Register.vue
<template>
<div>
<h2>我是注冊_Register.vue</h2>
</div>
</template>
<script></script>
<style></style>
App.vue
<template>
<div>
<h1>我是主文件_App.vue</h1>
</div>
</template>
<script></script>
<style></style>
index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<div id="app">
<router-link to="/login">登錄</router-link>
<router-link to="/register">注冊</router-link>
<router-view></router-view>
</div>
</body>
</html>
main.js
import Vue from 'vue'
import VueRouter from 'vue-router'
Vue.use(VueRouter);
import app from './App.vue'
import login from './components/Login.vue'
import register from './components/Register.vue'
new Vue({
el: "#app",
// render會把 el 指定的所有內容都清空,再添加 app 組件
render: diy => diy(app),
router: new VueRouter({
routes: [
{path: '/login', component: login},
{path: '/register', component: register}
]
})
});
.babelrc
{
"presets": ["env", "stage-0"],
"plugins": ["transform-runtime"]
}
package.json
{
"name": "test-vue-webpack",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"dev": "webpack-dev-server --open --port 2198 --hot"
},
"keywords": [],
"author": "",
"license": "ISC",
"dependencies": {
"babel-core": "^6.26.3",
"babel-loader": "^7.1.5",
"babel-plugin-transform-runtime": "^6.23.0",
"babel-preset-env": "^1.7.0",
"babel-preset-stage-0": "^6.24.1",
"bootstrap": "^3.4.1",
"css-loader": "^3.2.0",
"file-loader": "^4.2.0",
"html-webpack-plugin": "^3.2.0",
"less": "^3.10.3",
"less-loader": "^5.0.0",
"node-sass": "^4.12.0",
"sass-loader": "^7.3.1",
"style-loader": "^1.0.0",
"url-loader": "^2.1.0",
"vue": "^2.6.10",
"vue-loader": "^15.7.1",
"vue-router": "^3.1.2",
"vue-template-compiler": "^2.6.10",
"webpack": "^4.39.3",
"webpack-cli": "^3.3.7",
"webpack-dev-server": "^3.8.0"
}
}
webpack.config.js
//webpack是基於node進行構建的,所以支持node語法
var path = require("path");
//在內存中生成模版頁面
var htmlWebpackPlugin = require("html-webpack-plugin");
//vue-loader使用
var VueLoaderPlugin=require('vue-loader/lib/plugin');
//當以命令行運行webpack 或 webpack-dev-server ,工具會發現我們沒有執行入口或出口文件
//這時會檢查項目中的配置文件,並讀取這個文件
module.exports = {
entry: path.join(__dirname, "./src/main.js"),//入口文件
output: {
path: path.join(__dirname, "./dist"),//輸出路徑
filename: "bundle.js"//執行輸出文件的名稱
},
plugins: [
new htmlWebpackPlugin({
template: path.join(__dirname, "./src/index.html"),//指定模版文件路徑
filename: "index.html"//設置內存中頁面名稱
}),
new VueLoaderPlugin(),
],
module: { // 用來配置第三方loader模塊的
rules: [ // 文件的匹配規則
//處理css文件的規則
{test: /\.css$/, use: ['style-loader', 'css-loader']},
{test: /\.less$/, use: ['style-loader', 'css-loader', 'less-loader']},
{test: /\.scss$/, use: ['style-loader', 'css-loader', 'sass-loader']},
//小於等於 limit 不進行base64編碼
{test: /\.(png|jpg|jpeg|bmp|gif)$/, use: 'url-loader?limit=43960&name=[hash:8]-[name].[ext]'},
//處理字體文件的loader,bootstrap小圖標就是使用這個
{test: /\.(eot|svg|ttf|woff|woff2)$/, use: 'url-loader'},
// 配置 babel-loader 來轉換高級的ES語法
{test: /\.js$/, use: 'babel-loader', exclude: /node_modules/},
// 配置 vue-loader 來處理 .vue 文件
{ test: /\.vue$/, use: 'vue-loader' },
]
},
// resolve: {
// alias: { // 修改 Vue 被導入時候的包的路徑
// "vue$": "vue/dist/vue.js"
// }
// }
};
- 執行 在項目的目錄下執行
npm i
來安裝所需的依賴 - 執行
npm run dev
,無錯誤,但是沒有顯示index.html
中我們設置的兩個router-link
鏈接和router-view
坑 - 原因是因為
render會把 el 指定的所有內容都清空,再添加 app 組件
,所以,我們需要把這三個標簽放入App.vue
中
修改了index.html
修改App.vue
- 執行
npm run dev
也成功顯示了兩個鏈接, - 點擊了
登錄
之后 - 點擊了
注冊
之后 - 在
components
目錄下創建兩個文件Daniu.vue
和Erdan.vue
,並且修改了main.js
和Login.vue
Daniu.vue
<template>
<div>
<h3>我是大牛_Daniu.vue</h3>
</div>
</template>
<script></script>
<style></style>
Erdan.vue
<template>
<div>
<h3>我是二蛋_Erdan.vue</h3>
</div>
</template>
<script></script>
<style></style>
main.js
import Vue from 'vue'
import VueRouter from 'vue-router'
Vue.use(VueRouter);
import app from './App.vue'
import login from './components/Login.vue'
import register from './components/Register.vue'
import daniu from './components/Daniu.vue'
import erdan from './components/Erdan.vue'
new Vue({
el: "#app",
// render會把 el 指定的所有內容都清空,再添加 app 組件
render: diy => diy(app),
router: new VueRouter({
routes: [
{
path: '/login', component: login, children: [
{path: 'daniu', component: daniu},
{path: 'erdan', component: erdan}
]
},
{path: '/register', component: register}
]
})
});
Login.vue
<template>
<div>
<h2>我是登錄_Login.vue</h2>
<router-link to="/login/daniu">大牛</router-link>
<router-link to="/login/erdan">二蛋</router-link>
<router-view></router-view>
</div>
</template>
<script></script>
<style></style>
- 執行
npm run dev
- 點擊
登錄
- 點擊
注冊
- 點擊
登錄
再點擊大牛
- 點擊
登錄
再點擊二蛋
- 實現抽離模塊,在
src
目錄下創建文件router.js
,把main.js
中關於路由的數據放到router.js
router.js
import VueRouter from 'vue-router'
import login from './components/Login.vue'
import register from './components/Register.vue'
import daniu from './components/Daniu.vue'
import erdan from './components/Erdan.vue'
export default new VueRouter({
routes:
[
{
path: '/login', component: login, children:
[
{path: 'daniu', component: daniu},
{path: 'erdan', component: erdan}
]
},
{path: '/register', component: register}
]
})
main.js
import Vue from 'vue'
import VueRouter from 'vue-router'
Vue.use(VueRouter);
import router from './router.js'
import app from './App.vue'
new Vue({
el: "#app",
// render會把 el 指定的所有內容都清空,再添加 app 組件
render: diy => diy(app),
//router: router//可以簡寫為router
router
});
webpack 整合 Mint UI
- 執行
npm i mint-ui -S
- 在
main.js
中添加
import MintUI from 'mint-ui'
Vue.use(MintUI);
import 'mint-ui/lib/style.css'
3. 添加 Mint UI
的樣式
4. 執行 npm run dev
webpack 整合 MUI
- 因為它不是
npm
下載的,所有要去GitHub
去下載 點擊進入 - 在
src
目錄下,新建目錄lib
,把解壓之后的dist
文件夾 復制到lib
下,並改名為mui
- 使用方法和
bootstrap
差不多,在main.js
中添加import './lib/mui/css/mui.min.css'
- 在
App.vue
中添加
<button type="button" class="mui-btn">默認</button>
<button type="button" class="mui-btn mui-btn-primary">藍色</button>
<button type="button" class="mui-btn mui-btn-success">綠色</button>
<button type="button" class="mui-btn mui-btn-warning">黃色</button>
<button type="button" class="mui-btn mui-btn-danger">紅色</button>
<button type="button" class="mui-btn mui-btn-royal">紫色</button>
<hr/>