1、安装插件
    混入beforeCreate生命周期处理,初始化_routerRoot,_router,_route等数据
    全局设置vue静态访问router和router和route,方便后期访问
    完成了router-link和 router-view 两个组件的注册,router-link用于触发路由的变化,router-view作 为功能组件,用于触发对应路由视图的变化

    2、根据路由配置生成router实例
    根据配置数组生成路由配置记录表
    生成监控路由变化的hsitory对象

    3、将router实例传入根vue实例
    根据beforeCreate混入,为根vue对象设置了劫持字段_route,用户触发router-view的变化
    调用init()函数,完成首次路由的渲染,首次渲染的调用路径是 调用history.transitionTo方法,根据router的match函数,生成一个新的route对象
    接着通过confirmTransition对比一下新生成的route和当前的route对象是否改变,改变的话触发updateRoute,更新hsitory.current属性,触发根组件的_route的变化,从而导致组件的调用render函数,更新router-view

    另外一种更新路由的方式是主动触发
    router-link绑定了click方法,触发history.push或者history.replace,从而触发history.transitionTo
    同时会监控hashchange和popstate来对路由变化作对用的处理

    参考:
    https://blog.csdn.net/u013938465/article/details/79421239
    https://segmentfault.com/a/1190000018902037
    https://github.com/DDFE/DDFE-blog/issues/11