在webpack基础上使用vuejs基础功能
前言(前置环境配置)
本文章基于的项目的目录结构以及初始化npm,初始化webpack环境等前置内容,请参考这篇文章:传送门
step 1 安装vue
运行npm i vue
先检查不使用.vue
文件时项目运行情况,排除其它可能的干扰。
修改./src/index.html
文件如下:
<!DOCTYPE html> <html> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta http-equiv="X-UA-Compatible" content="ie=edge" /> <title>Document</title> </head> <body> <h1>Index</h1> <div id="app"> {{msg}} </div> </body> </html>
修改入口文件entry.js
如下
import './css/index.css' import './js/index.js'
在./js/index.js
中增加相关配置
/** * import Vue from 'vue' 所默认导入的Vue组件其实是不全的,或者对于刚开始学习和练习的人来说是不全的 * 所以这里实际上引用的是./node_modules/vue/dist/vue.js 其中./node_modules按语法可省略 */ import Vue from 'vue/dist/vue.js' var app = new Vue({ el:'#app', data:{ msg:'测试' } })
使用npm run dev
打开网站,能在页面上看到对应的文本“测试”,则说明至此为止项目一切配置正常。
step 2 安装解析.vue的loader
显然,Vue.js还没有像.css和图片资源,字体资源那样统一前端界与普及,所以我们应该首先考虑Vue官方是否提供了在Webpack下使用Vue的信息。因此,我们以 .vue site:vuejs.org
进行搜索
搜素结果中的第一个在阅览后便给出了我们想要的答案:传送门
切换到左侧目录中的 起步-手动设置 章节,按照官方文档进行操作。
安装:npm install -D vue-loader vue-template-compiler
按照官方文档引入配置,在我们的项目中完成配置后配置文件webpack.config.js
应当如下:
const path = require("path"); //路径管理模块,使用它可以高效获取项目路径,避免路径错误. //导入html-webpack-plugin以便之后配置 var htmlWebpackPlugin = require("html-webpack-plugin"); //为开启热部署引入webpack模块 const webpack = require("webpack"); //引入.vue支持 const VueLoaderPlugin = require('vue-loader/lib/plugin') /** * 在这个对象中配置webpack的运行参数 */ var config = { //指定集成引入资源的入口js文件 entry: path.join(__dirname, "./src/entry.js"), //webpack处理后输出的文件的配置 output: { path: path.join(__dirname, "./dist"), //指定输出的目录 filename: "bundle.js" //输出的文件的文件名 }, module: { rules: [ { test: /\.css$/, use: ["style-loader", "css-loader"] }, { test: /\.(jpg|jpeg|png|gif)$/, use: "url-loader" }, { test: /\.(woff|woff2|ttf|eot|svg)$/, use: "url-loader" }, //为.vue添加解析 { test: /\.vue$/, loader: 'vue-loader' } ] }, //配置webpack-dev-server的运行参数 devServer: { open: true, //运行后自动打开浏览器 port: 3000, //启动的服务器的监听端口 //contentBase: path.join(__dirname, "./src"), //指定托管的网站文件的根目录 hot: true //启用热更新 }, //用来引入webpack的插件 plugins: [ //引入html-webpack-plugin插件 这里的htmlWebpackPlugin是第四行require进来的 new htmlWebpackPlugin({ //指定要被插件处理的页面 template: path.join(__dirname, "./src/index.html"), //指定页面处理后的名字 filename: "index.html" }), new webpack.HotModuleReplacementPlugin(), //为Vue而引入 new VueLoaderPlugin() ] }; /** * 向外暴露配置webpack的对象 */ module.exports = config;
至此我们已经按照官方文档完成了vue相关loader的配置,让我们来测试是否成功吧。
创建./src/login.app
,我们假装这是一个登录组件,内容如下:
<template> <div> <p>登录组件</p> </div> </template> <script> </script> <style> </style>
修改./src/js/index.js
文件,修改后内容如下:
import Vue from "vue/dist/vue.js"; import login from "../login.vue"; var app = new Vue({ el: "#app", data: { msg: "测试" }, render: function(createEl) { return createEl(login); } });
保存后再去查看网页,会发现原本的“测试”文本消失了,变成了“登录组件”,意味着Vue与Webpack结合成功。
step 3 安装vue-router
官方文档:传送门 。
我们希望创建如下一个简单网页来测试对vue-router的安装是否成功:在主页上有“登录”和“注册”两个按钮,点击登录展示登录组件,点击注册展示注册组件,在此过程中页面不跳转。
按照官方文档,先安装vue-router模块:npm i -S vue-router
创建VueTemplates文件夹,并在其下创建login.vue和register.vue,把它们假装是登录和注册组件。
./src/VueTemplates/login.vue <!-- 注册组件基本相同,不再赘述 --> <template> <div> <p>登录组件</p> </div> </template> <script> export default {}; </script> <style scoped> </style>
./src/app.vue <template> <div> <h1>App</h1> <router-link to="/login">登录</router-link> <router-link to="/register">注册</router-link> <router-view></router-view> </div> </template> <script> //按照官方文档要求引入vue-router import Vue from "vue/dist/vue.js"; import VueRouter from "vue-router"; Vue.use(VueRouter); //引入我们自定义的组件 import loginT from "./VueTemplates/login.vue"; import registerT from "./VueTemplates/register.vue"; //路由控制 var router = new VueRouter({ routes: [ { path: "/login", component: loginT }, { path: "/register", component: registerT } ] }); export default { // 为app这个template模板设置路由控制 router }; </script> <style scoped> </style>
修改./src/index.js
,引入app模板并将其渲染到页面上。
import Vue from 'vue/dist/vue.js' //引入app.vue模板 import appT from '../app.vue' var app = new Vue({ el:'#app', data: { msg:'Vue引入测试' }, //将app渲染到页面上 render: (createEl) => {return createEl(appT)} })
npm run dev
后应该能实现我们一开始预计想要的功能。至此说明vue-router模块引用成功。