文件路径:VUE3.0源码scripts/utils.js昨天我们解读的scripts/dev.js文件中有这么一句话://获取命令行参数输入的模块名,默认值:vueconsttarget=args。_。长度?fuzzyMatchTarget(args._)[0]:utils.js文件中定义了'vue'语句中的fuzzyMatchTarget函数,目的是分析终端命令行传入的模块参数,是否能匹配根目录/packages目录下模块名源码如下:/**nodejs模块——fs模块:fs模块用于读写系统文件和目录*/constfs=require('fs')/**nodejs模块——chalk模块:作用是修改控制台中字符串的样式*/constchalk=require('chalk')/***targets:返回目标模块列表如:['compiler-core','compiler-dom']*fs.readdirSync同步读取package.json同目录下的packages文件夹,返回变化文件夹下所有子文件夹名称列表*/consttargets=(exports.targets=fs.readdirSync('packages').filter(f=>{//同步判断:过滤掉不是文件夹的数据if(!fs.statSync(`packages/${f}`).isDirectory()){returnfalse}constpkg=require(`../packages/${f}/package.json`)/***使用private:true和buildOptions为空的属性过滤掉package.json中的私有库*/if(pkg.private&&!pkg.buildOptions){returnfalse}returntrue}))/***模糊匹配命令行输入的模块名(partialTargets:可以输入缩写,模糊匹配也可以成功)与所有实际模块列表(targets)*@param{string[]}partialTargetsTargets的匹配结果为命令行输入的模块名列表*@param{*}当includeAllMatching设置为true时,targets中的所有匹配结果都会被回;当为假时,只有第一个结果*@returns*/exports.fuzzyMatchTarget=(partialTargets,includeAllMatching)=>{constmatched=[]partialTargets.forEach(partialTarget=>{for(consttargetoftargets){/***'compiler-core'.match('core')returnsnon-null*/if(target.match(partialTarget)){matched.push(target)//当includeAllMatching设置为true时,将返回targets中的所有匹配结果;false时,只返回第一个A结果命令行中输入的终端模块name(partialTargets)notfoundfound!`)}`)console.log()//0表示没有任何类型的失败结束进程,而1表示进程由于某些失败而结束。过程。出口(1)}}如果你对“前端源码”情有独钟,可以微信扫码关注下方二维码公众号,内容持续更新中!目前VUE3.0源码正在解析中,欢迎加入!
