1、安装 vue包:npm i vue -S
2、由于在webpack中,推荐使用.vue这个组件模版文件来定义组件,不然会出现vue.js移动和一些高级语法的不支持,因此需要安装能解析这种文件的loader:npm i vue-loader vue-template-complier -D
3、在main.js中,导入vue模块:import Vue from 'vue'
4、定义一个.vue结尾的组件,其中组件有三部分组成:template script style
5、使用 import login from './login.vue' 导入这个组件
6、创建vm的实例 var vm = new Vue({el:'#app',render:c=>c(login)})
7、在页面中创建一个id 为 app 的div 元素,作为我们vm实例要控制的区域
源码-main.js:
1 import $ from 'jquery' 2 import './css/index.css' 3 import './css/index.less' 4 import './css/index.scss' 5 import 'bootstrap/dist/css/bootstrap.css' 6 //import Vue from '../node_modules/vue/dist/vue.js' 7 import Vue from 'vue' 8 import login from './login.vue' 9 10 $(function () { 11 $('li:odd').css('backgroundColor', 'cyan'), 12 $('li:even').css('backgroundColor', function () { 13 return '#' + 'F8F8F8' 14 }) 15 }) 16 17 //class关键字是es6中提供的新语法,用来实现es6中面向对象编程的方式 18 class Person { 19 //使用static关键字,可以定义静态属性,所谓的静态属性就是可以直接通过 类名直接访问的属性 20 //与静态属性对立的是实例属性:只能通过类的实例来访问的属性 21 //该语法属于高级语法,es6或以上,webpack自身是处理不了的,它需要借助第三方的loader来处理:Babel,它可以将高级语法转为低级语法,在webpack中可以运行两套命令: 22 //第一套:npm i babel-core babel-loader babel-plugin-transform-runtime -D 23 //第二套:npm i babel-preset-env babel-preset-stage-0 -D 24 static info = { name: 'zs', age: 20 } 25 } 26 27 //访问Person 类身上的 info静态属性 28 console.log(Person.info) 29 30 var vm = new Vue({ 31 el: '#app', 32 data: { 33 msg: 'Cristin' 34 }, 35 // components:{ 36 // login 37 // } 38 39 //在webpack中,如果想要通过vue把一个组件放到页面中展示,vm实例中的render函数可以实现,传统的components是不可以的 40 // render:function(createElements){ 41 // return createElements(login) 42 // } 43 44 //原始的render:function(createElements)简写 45 render: c => c(login) 46 }) 47 import m222, { title as xiaoxingxing, content } from "./test"; 48 console.log(m222) 49 console.log(xiaoxingxing + "----" + content) 50 51 //1、导入vue-router包 52 import VueRouter from 'vue-router' 53 54 //导入app组件 55 import app from './App.vue' 56 //导入Account 组件 57 import account from './main/Account.vue' 58 //导入 GoodsList 组件 59 import goodslist from './main/GoodsList.vue' 60 61 //2、手动安装VueRouter 62 Vue.use(VueRouter) 63 64 65 66 //3、创建路由对象 67 var router = new VueRouter( 68 { 69 routes: [ 70 // account goodslist 71 { path: '/account', component: account }, 72 { path: '/goodslist', component: goodslist } 73 ] 74 } 75 ) 76 77 var rv = new Vue( 78 { 79 el: '#router', 80 render: c => c(app), 81 //4、路由对象挂在到rv上 82 router 83 } 84 )
源码:webpack.config.js
const path = require('path') const htmlWebpackplugin = require('html-webpack-plugin'); const CleanWebpackPlugin = require('clean-webpack-plugin'); const webpack = require('webpack'); const VueLoaderPlugin = require('vue-loader/lib/plugin'); //这个配置文件,其实就是一个js文件,通过Node中的模块操作向外暴露一个配置对象,然后命令行通过webpack命令直接被执行 module.exports = { //配置文件中,需要手动指定入口和出口 //入口 entry: { //表示要使用的webpack打包哪个文件 path: path.join(__dirname, './src/main.js'), }, //出口 output: { //指定打包好的文件输出到哪个目录里 path: path.join(__dirname, './dist'), //指定输出文件的名称 filename: 'bundle.js' }, plugins: [ new webpack.NamedModulesPlugin(), //new一个热更新的模块对象(步骤:1、devServer增加配置 2、引用webpack对象(const webpack = require('webpack') 3、插件数组中 new一个热启动对象 )) new webpack.HotModuleReplacementPlugin(), new VueLoaderPlugin(), new CleanWebpackPlugin(), new htmlWebpackplugin({ title: 'Output Management', //根据模版页面来在缓存中生成想要的页面文件,指定模版文件路径 template: path.join(__dirname, './src/index.html'), //生成的页面名称 filename: 'index.html' }) ], devServer: { //contentBase: './dist', // 设置服务器访问的基本目录 //contentBase: path.resolve(__dirname, 'dist'), //最好设置成绝对路径 // 设置服务器的ip地址,可以是localhost host: 'localhost', // 设置端口 port: 8090, // 设置自动拉起浏览器 open: true, // 设置热更新 hot: true }, devtool: 'inline-source-map', //用于配置所有的第三方模块加载器规则的,它【module】是一个对象 module: { rules: [ //配置处理.css文件的第三方loader规则 { test: /.css$/, use: ['style-loader', 'css-loader'] }, //配置处理.less文件的第三方loader规则,需要安装less-loaderless { test: /.less$/, use: ['style-loader', 'css-loader', 'less-loader'] }, //配置处理.scss文件的第三方loader规则,需要安装node-sasssass-loader { test: /.scss$/, use: ['style-loader', 'css-loader', 'sass-loader'] }, //配置处理图片文件的第三方loader规则,需要安装url-loader { test: /.(jpg|png|gif|bmp|jpeg)$/, use: 'url-loader?limit=99639&name=[hash:8]-[name].[ext]' }, //处理字体文件的loader配置信息 { test: /.(ttf|eot|svg|woff|woff2)$/, use: 'url-loader' }, //处理class文件的loader配置信息,需要安装 babel-coreabel-loaderabel-plugin-transform-runtime { test: /.js$/, use: 'babel-loader', exclude: /node_modules/ }, //处理vue文件的loader配置信息 { test: /.vue$/, use: 'vue-loader' }, ] }, resolve: { //修改Vue被导入时候的包的路径 alias: { //"vue$": "vue/dist/vue.js" } } }
源码:login.vue
<template> <div> <h1>自动化平台前端---{{msg}}</h1> </div> </template> <script> export default { data() { return { msg: "Robin" }; }, methods: { show() { console.log("调用了 login.vue 中的 show 方法"); } } }; </script> <style> </style>
源码:前端
<!DOCTYPE html> <html lang="en"> <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> <ul> <li>这是第1个li</li> <li>这是第2个li</li> <li>这是第3个li</li> <li>这是第4个li</li> <li>这是第5个li</li> <li>这是第6个li</li> <li>这是第7个li</li> <li>这是第8个li</li> <li>这是第9个li</li> <li>这是第10个li</li> </ul> <div class="box"></div> <div class="btn-group" role="group" aria-label="..."> <button type="button" class="btn btn-default">Left</button> <button type="button" class="btn btn-default">Middle</button> <button type="button" class="btn btn-default">Right</button> </div> <div id="app"> <p>{{msg}}</p> <login></login> </div> <div id="router"> </div> </body> </html>