怎样操作vue中.vue文件解析

这次给大家带来怎样操作vue中.vue文件解析,操作vue中.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;  customBlocks: Array;};

登录后复制

文件入口

解析 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 等库来做的。

相信看了本文案例你已经掌握了方法,更多精彩请关注【创想鸟】其它相关文章!

推荐阅读:

如何使用react配合antd组件实现管理系统

js图片转base64方法总结

以上就是怎样操作vue中.vue文件解析的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2751014.html

(0)
上一篇 2025年3月8日 05:46:04
下一篇 2025年2月27日 09:06:24

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • 如何使用vue源码解析事件机制

    这次给大家带来如何使用vue源码解析事件机制,使用vue源码解析事件机制的注意事项有哪些,下面就是实战案例,一起来看一下。 click1 click2 var Child = { template: ‘a custom component!…

    编程技术 2025年3月8日
    200
  • 通俗易懂解析JS原型与原型链

    这次给大家带来通俗易懂解析js原型与原型链,解析js原型与原型链的注意事项有哪些,下面就是实战案例,一起来看一下。 Browser中的对象 浏览器中有哪些对象?ES中规定全局对象为global,而浏览器中规定全局对象为window。 在ch…

    编程技术 2025年3月8日
    200
  • 配置打包文件路径出错怎样解决

    这次给大家带来配置打包文件路径出错怎样解决,配置打包文件路径出错解决的注意事项有哪些,下面就是实战案例,一起来看一下。 问题 项目在开发环境下工作正常,当打包后图片不见了,检查元素后发现路径出错了。 图片路径是这样:background: …

    2025年3月8日
    200
  • 在vue中如何优化页面(按需加载)

    本篇文章主要介绍了vue项目优化之页面的按需加载(vue+webpack),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧 通过vue写的单页应用时,可能会有很多的路由引入。当打包构建的时候,javascript…

    2025年3月8日 编程技术
    200
  • 有关webpack项目配置

    本篇文章主要介绍了详解webpack编译多页面vue项目的配置问题,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧  本文主要介绍了webpack编译多页面vue项目的配置问题,分享给大家,具体如下: 一般情况下…

    编程技术 2025年3月8日
    200
  • 在vue中使用v-model如何实现父子组件通信

    vue.js,是一个构建数据驱动的 web 界面的库。vue.js 的目标是通过尽可能简单的 api 实现响应的数据绑定和组合的视图组件。下面这篇文章主要给大家介绍了关于vue项目中v-model父子组件通信实现的相关资料,需要的朋友可以参…

    2025年3月8日
    200
  • 使用Vue如何制作自定义全局组件

    这两天学习了vue.js 感觉组件这个地方知识点挺多的,而且很重要,所以这篇文章主要给大家介绍了关于vue中自定义全局组件的实现方法,文中通过示例代码介绍的非常详细,对大家学习或者使用vue具有一定的参考学习价值,需要的朋友们下面随着小编来…

    编程技术 2025年3月8日
    200
  • 有关Vue配置指南(详细教程)

    vux是vue.js的一个ui库,官网在这里,官方文档的配置指南侧重于技术的罗列,我这里简化一下vux的配置流程。感兴趣的朋友跟随脚本之家小编一起学习吧 简介 Vux(读音 [v’ju:z],同views)是基于WeUI和Vue…

    编程技术 2025年3月8日
    200
  • 在vue中如何实现axios二次封装

    本篇文章主要介绍了vue axios 二次封装的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧 这段时间告诉项目需要,用到了vue。 刚开始搭框架的时候用的是vue-resource后面看到官方推荐ax…

    编程技术 2025年3月8日
    200
  • 如何通过全局方法使用Vue.use()组件

    本篇文章主要介绍了vue自定义全局组件并通过全局方法 vue.use() 使用该组件,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 简介 Vue.use( plugin ):安装 Vue.js 插件。如果插件是一个对象,必须提供 ins…

    编程技术 2025年3月8日
    200

发表回复

登录后才能评论