本节的示例代码如下

在new VueRouter的过程中,会将我们的路由列表配置进行相应的转化,今天我们就一起来看下都做了哪些事情
在init流程分析中我们知道,在实例化路由的constructor中会调用createMatcher函数

在该函数中调用createRouteMap对我们传入的路由列表进行处理,将我们的定义routes数组传入

定义pathList、pathMap和nameMap三个数组,这将收集我们在路由中定义的path、name等属性,初次为空数组
对routes进行遍历调用addRouteRecord

框红的两个位置是对一些风险做一些警告,比如path不能为空、component不能是String类型等
调用normalizePath对path路径做一次格式化处理

strict我们未配置,故在路径以/结尾时删除/,如/foo/=>/foo
如果路径以/开头则说明是一个完整的新路径,因此新增的路径是不以/开头的,如新路径/foo,而新增路径为child,它俩组合为/foo/child
如果没有父路径,则也说明是一个新路径
最后则对路径拼接中多余的/删除,如/foo//child=>/foo/child
故对于我们示例中的/foo来说,normalizedPath='/foo'
接着创建一个空的路由对象,这将在后续操作过程中补充并记录相关路由信息

接着判断有没有子路由children,有的话递归调用addRouteRecord

向pathList和pathMap中记录当前路由

pathList是对path的映射,即['/foo','/info/child','/info']
pathMap则以path作为key,保持了完整的路由描述record,即{'/foo':record,'/info/child':record,'/info':record}
对别名alias进行处理

再次调用addRouteRecord,这将分别向pathList、pathMap、nameMap中再push一次,只是这次的record中记录了machAs为'/原路径'
对命名路由进行处理

和别名不一样,这里不需要再次递归addRouteRecord,只是将record记录在nameMap中
也就是说,vueRouter会拿到我们定义的routes数据执行遍历,递归调用addRouteRecord将我们每一个数组元素访问一遍,并将他们的name、path映射成一个数组(pathMap、pathList、nameMap)
