您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息
免费发信息
三六零分类信息网 > 衡阳分类信息网,免费分类信息发布

怎样对vue文件进行解析

2024/5/3 20:03:37发布35次查看
这次给大家带来怎样对vue文件进行解析,对vue文件进行解析的注意事项有哪些,下面就是实战案例,一起来看一下。
我们平时写的 .vue 文件称为 sfc(single file components),本文介绍将 sfc 解析为 descriptor 这一过程在 vue 中是如何执行的。
vue 提供了一个 compiler.parsecomponent(file, [options]) 方法,来将 .vue 文件解析成一个 descriptor:
// an object format describing a single-file component.declare type sfcdescriptor = {  template: ?sfcblock;  script: ?sfcblock;  styles: array<sfcblock>;  customblocks: array<sfcblock>;};
文件入口
解析 sfc 文件的入口在 src/sfc/parser.js 中,该文件 export 了 parsecomponent 方法, parsecomponent 方法用来对单文件组件进行编译。
接下来我们看看 parsecomponent 方法都做了哪些事情。
parsecomponent 方法
function start(tag, attrs, unary, start, end,){}function end(tag, start, end){}parsehtml(content, {  start,  end})
parsecomponent 方法中定义了 start``end 两个函数,之后调用了 parsehtml 方法来对 .vue 文件内容践行编译。
那么这个 parsehtml 方法是做啥的呢?
parsehtml 方法
该方法看名字就知道是一个 html-parser,可以简单理解为,解析到每个起始标签时,调用 option 中的 start;每个标签结束时,调用 option 中的 end。
对应到这里,就是分别调用 parsecomponent 方法中定义的 start 和 end 函数。
在 parsecomponent 中维护一个 depth 变量,在 start 中将 depth++ ,在 end 中 depth-- 。那么,每个 depth === 0 的标签就是我们需要获取的信息,包含 template、script、style 以及一些自定义标签。
start
每当遇到一个起始标签时,执行 start 函数。
1、记录下 currentblock。
每个 currentblock 包含以下内容:
declare type sfcblock = {  type: string;  content: string;  start?: number;  end?: number;  lang?: string;  src?: string;  scoped?: boolean;  module?: string | boolean;};
2、根据 tag 名称,将 currentblock 对象在返回结果对象中。
返回结果对象定义为 sfc,如果tag不是 script,style,template 中的任一个,就放在 sfc.customblocks 中。如果是style,就放在 sfc.styles 中。script 和 template 则直接放在 sfc 下。
if (isspecialtag(tag)) {  checkattrs(currentblock, attrs)  if (tag === 'style') {    sfc.styles.push(currentblock)  } else {    sfc[tag] = currentblock  }} else { // custom blocks  sfc.customblocks.push(currentblock)}
end
每当遇到一个结束标签时,执行 end 函数。
1、如果当前是第一层标签(depth === 1),并且 currentblock 变量存在,那么取出这部分text,放在 currentblock.content 中。
if (depth === 1 && currentblock) { currentblock.end = start let text = deindent(content.slice(currentblock.start, currentblock.end)) // pad content so that linters and pre-processors can output correct // line numbers in errors and warnings if (currentblock.type !== 'template' && options.pad) {  text = padcontent(currentblock, options.pad) + text } currentblock.content = text currentblock = null}
2、depth-- 。
得到 descriptor
在将 .vue 整个遍历一遍后,得到的 sfc 对象即为我们需要的结果。
生成 .js ?
compiler.parsecomponent(file, [options]) 得到的只是一个组件的 sfcdescriptor ,最终编译成.js 文件是交给 vue-loader 等库来做的。
相信看了本文案例你已经掌握了方法,更多精彩请关注其它相关文章!
推荐阅读:
配置打包文件路径出错怎样解决
怎样做出点击标题文字切换字体效果
以上就是怎样对vue文件进行解析的详细内容。
衡阳分类信息网,免费分类信息发布

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录