Vue(四) Vue-CLI(脚手架)快速开发

一.Vue-CLI概述

1.Vue-CLI简介

        Vue-CLI是一个官方推荐的 vue.js 项目开发脚手架,全称为Vue命令行接口。Vue-CLI通过几个简单的命令,将可以快速帮助我们构建一套完整、规范的Vue前端项目。看似笨拙的命令行工具却极大简化了我们的开发。

  • vue-cli 3.x版本:提供了用户界面,产生了很多新特性,开发中还未普及。
  • vue-cli 2.x版本:传统的命令行界面,开发使用广泛,本次使用2.x版本。

2.Vue-CLI优点

  • 快速构建。vue-cli提供了一套完整的vue项目开发规范,使得项目开发灵活、方便
  • 依赖管理。vue-cli通过npm管理各种js依赖,并能随时升级
  • 打包方式。vue-cli通过webpack进行项目打包,带有合理的默认配置 ,并且支持es6->es5语法的自动转化。支持热部署。

二. Vue-CLI安装

1.安装node.js

        node.js是一个基于 Chrome V8 引擎的 JavaScript 运行环境,其使用了一个事件驱动、非阻塞式 I/O 的模型,使其轻量又高效。 Node 本质上是一个让 JavaScript 能运行在服务端的开发平台,即前端服务器

        我们在vue-cli中需要使用npm来管理js依赖,使用webpack来打包项目,这二者都是基于nodejs运行的,因此我们需要先安装nodejs环境。

 (1)下载node.js

  •  win7 : nodeJs到14.0.0+就不支持win7系统了,只能选择之前的版本,比较新的是13.14.0版本,Node.js Mirror
  • win8+:直接安装最新版,下载 | Node.js 中文网

Vue(四) Vue-CLI(脚手架)快速开发_第1张图片

 (2)解压到文件夹

Vue(四) Vue-CLI(脚手架)快速开发_第2张图片

 (3)配置nodejs环境变量

         在实际开发中,我们不能每次都手动启动node或者每次都必须进入nodejs目录下才能使用npm等node相关指令,因此我们需要配置nodejs的环境变量,让计算机随时识别/找到相关命令。

Vue(四) Vue-CLI(脚手架)快速开发_第3张图片

 (4)验证nodejs环境是否成功

         在cmd任意位置,执行node -v指令即可。若出现版本信息,则表示安装并配置环境成功。

 2.配置npm

       npm全称为node package mangager,即node依赖包管理器。npm是基于nodejs(内置工具)的一个用来管理前端所有JS依赖包的工具,类似于Java后端的maven仓库。它也通过坐标在远程仓库中下载、管理依赖,同时提供配置本地仓库,管理本地JS文件。

 (1)配置本地仓库

配置本地仓库缓存位置npm config set cache "F:\nodeJs\noderep"
配置本地仓库全局位置npm config set prefix "F:\nodeJs\noderep"

 (2)配置远程仓库下载镜像

使用淘宝镜像 npm config set registry https://registry.npm.taobao.org

(3) 验证npm配置

        执行npm config ls,观察配置列表

Vue(四) Vue-CLI(脚手架)快速开发_第4张图片

 3.配置Vue-CLI脚手架

 (1)安装CLI脚手架

# 1.Vue Cli官方网站
    介绍 | Vue CLI

# 2.安装vue Cli
    npm install -g vue-cli  (安装2.x版本)

    npm install -g @vue/cli  (安装3.x版本)

 (2)配置本地仓库环境变量

        npm将Vue-Cli安装到本地仓库,要想在任意地方使用CLI相关指令和操作,必须配置本地仓库的环境变量,让计算机识别指令。

Vue(四) Vue-CLI(脚手架)快速开发_第5张图片

 (3)测试Cli配置是否成功

        执行 vue init 指令,若出现命令提示,则表示CLI脚手架安装和配置成功。

Vue(四) Vue-CLI(脚手架)快速开发_第6张图片

三.Vue-Cli项目构建与结构解析

1.使用Cli构建项目

        在项目目标创建目录下,执行指令 vue init webpack projectName 构建以projectName为名称的vue项目。

  • vue init : cli项目创建指令
  • webpack : 指定项目打包方式为webpack
  • projectName : 项目名称

Vue(四) Vue-CLI(脚手架)快速开发_第7张图片

 2.项目运行

        在项目根目录下,执行指令 npm run dev ,运行成功后,就可以通过浏览器访问项目了 http://localhost:8080 。

Vue(四) Vue-CLI(脚手架)快速开发_第8张图片

 2.项目结构解析

        vue-cli脚手架搭建的项目具有自己的项目结构和开发规范,下面就项目结构进行解析。

Vue(四) Vue-CLI(脚手架)快速开发_第9张图片

1.build:webpack打包相关配置文件,推荐默认

2.config:vue基本配置文件,可修改项目port、host等基本属性,推荐默认

3.node_modules:用来存放和管理项目中所用到的所有依赖。由于文件较大,一般不作为项目传输内容,后面通过package.json构建

4.src:开发者的vue源代码存放文件[重点]

        - assets: 存放所有的静态资源(css、img、mp3...)

        - components:存放所有的开发组件

        - router:配置项目路由管理器,以及路由规则

        - App.vue:项目根组件

        - main.js:入口文件,挂载唯一Vue实例

5.static:用来存放静态资源,但现已被 src/assets 代替

6.babelrc、editorconfig、postcssrc.js:隐藏文件,一些配置文件,将es6语法打包转化为es5

7.gitignore:git版本控制忽略文件配置

8.index.html:项目单页面应用入口,主页

9.package.json:项目管理依赖坐标文件,类似于pom.xml。可用于 npm install  重建node_modules

10.package-lock.json:对package.json加锁的锁文件

11.README.md:项目描述/说明文件

 3.Src核心文件讲解

(1)index.html

        index.html仅作为单页面应用的入口,挂载Vue实例。具体样式、功能等开发由组件完成,不再对index.html修改。即一般只定义一个空的根节点,在main.js里面定义的实例将挂载在根节点下,内容都通过vue组件来填充。



  
    
    
    secondvue
  
  
    
    

(2)根组件App.vue

          根组件App直接挂载到Vue根实例上,默认渲染,不被router管理,是所有子组件的容器。一个Vue组件在Cli中以.vue为后缀,通常由三部分分离组成:模板(template)、js代码(script)、样式(style),说明如下:

  • template:模板只能包含一个父节点,也就是说顶层的div只能有一个。而是子路由视图插槽,后面的组件页面都显示在此处。
  • script:JS代码书写区。vue通常用es6来写,用export default导出,其下面可以包含数据data,生命周期(mounted等),方法(methods)等。
  • style:样式通过style标签包裹,默认是影响全局的。如需定义作用域只在该组件下起作用,需在标签上加scoped,即







 (3)入口main.js

       Vue-Cli为了方便解耦,将页面index.html、Vue实例、组件、路由等分离开来,不再在一个页面中进行开发,各个部分之间通过入口main.js联系起来, main.js为项目的入口文件,即单入口,主要是引入vue框架,根组件及路由设置,并且定义vue实例。

import Vue from 'vue' //引入Vue框架依赖
import App from './App' //引入根组件App.vue
import router from './router' //引入路由配置

// 关闭生产模式下给出的提示
Vue.config.productionTip = false

//定义唯一Vue实例
new Vue({
  //绑定挂载到index.html中的元素下
  el: '#app',
  //绑定路由router
  router,
  //注册根组件 App.vue
  components: { App },
  //用根组件样式 替换和覆盖掉 index.html中挂载的元素
template: '' })

(4)components/HelloWorld.vue组件







(5)router/index.js路由配置

import Vue from 'vue' //引入vue框架依赖
import Router from 'vue-router' //引入router依赖
import HelloWorld from '@/components/HelloWorld' //引入组件HelloWorld

//使用路由依赖
Vue.use(Router)

export default new Router({
  //配置路由信息
  routes: [
    {
      path: '/',
      name: 'HelloWorld',
      component: HelloWorld
    }
  ]
})

四.WebStorm Vue项目开发

1.下载安装WebStorm后,新建空文件夹(Empty Project),在下方的Terminal中,进行vue-cli指令开发即可。

Vue(四) Vue-CLI(脚手架)快速开发_第10张图片

 2.标准前端开发方式(以员工管理系统为例)

(1)项目目录结构

Vue(四) Vue-CLI(脚手架)快速开发_第11张图片

- assets:存放静态资源(img、mp3、css..)

- components:存放项目公共组件(提取出来的公共组件)

- router:项目路由配置

- utils:项目工具js(比如axios实例)

- views:项目各部分功能组件

        - dept:部门相关的组件

                - Index.vue:部门的主页组件

        - emp:员工相关的组件

                - Index.vue:员工的主页组件

       -  Index.vue:项目总主页组件

       - Login.vue:登录组件

       - 404.vue:错误提示组件

- App.vue:根组件

- main.js:主入口(挂载vue实例)

 (2)路由配置router/index.js

import Vue from 'vue'
import Router from 'vue-router'

Vue.use(Router)

export default new Router({
  routes: [
    {
      path:'/login',
      name:'Login',
      //component:Login
      component:()=>import('../views/Login') //按需加载
    },
    {
      path:'/',
      redirect:'/index'
    },
    {
      path:'/index',
      name:'Index',
      component:()=>import('../views/Index'),
      //子路由
      children:[
        {
          path:'emps',
          name:'Emps',
          component:()=>import('../views/emp/Index')
        },
        {
          path:'depts',
          name:'Depts',
          component:()=>import('../views/dept/Index')
        }
      ]
    },
    {
      path:'*',
      name:'Error',
      component:()=>import('../views/404')
    }
  ]
})

(3)工具 request.js

import axios from 'axios' //引入axios

//创建默认实例
const instance = axios.create({
  baseURL:'http://localhost:8989',
  timeout:5000
})

//设置响应拦截器,统一处理错误
instance.interceptors.response.use(response=>{
  console.log('响应成功');
  //注意:一定返回响应,不然会被拦截住不再下传!
  return response;
},err=>{
  //this.$router.push({name:'Error'});
  console.log(this);
})

//注意:暴露instance实例对象,才能让其他文件可以使用!
export default instance;

(4)Login.vue登录组件






(5)Index.vue主页组件






(6)emp/Index.vue 员工组件主页






(7)后端ResultVo

package com.sdust.utils;

public class ResultVo {
    //响应状态
    private boolean success;
    //响应消息
    private String msg;
    //携带对象
    private Object data;

    private ResultVo (boolean success,String msg,Object data){
        this.success = success;
        this.msg = msg;
        this.data = data;
    }

    public static ResultVo success(String msg,Object data){
        return new ResultVo(true,msg,data);
    }

    public static ResultVo error(String msg,Object data){
        return new ResultVo(false,msg,data);
    }

    public static ResultVo error(String msg){
        return new ResultVo(false,msg,null);
    }

    //注意:必须设置set get方法,fastJson才能使用get方法构建json对象!
    public boolean isSuccess() {
        return success;
    }

    public void setSuccess(boolean success) {
        this.success = success;
    }

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }

    public Object getData() {
        return data;
    }

    public void setData(Object data) {
        this.data = data;
    }
}

3.抽取公共组件

- 定义:在Vue项目开发时,有时很多页面都有一个共同的部分(比如页面头、页面侧边栏、页面底部等等),为了减少代码冗余,简化开发,我们可以把公共部分抽取出来进行复用,这就是Vue的公共组件抽取。

- 举例:在上面例子中,Index主页面中的标题、登录和导航栏部分是一些页面共有的,因此我们可以把这部分抽取出来做成公共组件。

(1) 在Components目录下新建公共组件Header.Vue

        Components目录专门用来存放公共组件Vue。注意公共组件也是一个Vue组件,应该包括完整的组件样式、组件相关数据、JS代码等信息!






 (2)在页面中使用组件

        在页面的