01|编译和非编译模式:离开Vue工具,你还知道怎么用Vue 3吗?
Vue.js 3 代码编译结果是什么样子的?
- 深入了解
- 翻译
- 解释
- 总结
Vue.js 3的编译和非编译模式是本文的重点。文章首先提出了一个场景,即在生产环境中出现Vue.js代码报错时,如何快速定位和排错。作者强调了对Vue.js非编译模式的理解的重要性,以确保代码能在浏览器中正常运行,即使脱离了构建工具。接着,文章详细介绍了Vue.js代码的编译结果,包括模板编译成VNode、JavaScript逻辑代码编译成运行时逻辑代码以及内置CSS样式代码的抽离。作者还提供了一个简单的Vue.js 3组件的完整代码示例,以及经过编译器编译后的JavaScript代码结果。通过这些示例,读者可以清晰地了解Vue.js代码经过编译后的运行方式。 在介绍了编译后的结果后,文章进一步分析了Vue.js非编译模式的运行方式。通过对比Vue.js 3的非编译代码和原生语法的关联,作者指出非编译模式也包括模板和逻辑这两个部分,并提供了相关代码示例。最后,作者探讨了非编译写法的简化问题,引出了对更简单的非编译写法的探讨。 总的来说,本文通过介绍Vue.js 3的编译和非编译模式,以及相关代码示例,帮助读者更好地理解Vue.js代码的编译过程和非编译模式的运行方式,同时引发了对非编译写法的思考。文章内容丰富,适合对Vue.js感兴趣的开发者阅读。文章还探讨了非编译模式的其他作用,如辅助生产环境快速定位问题、快速反推到源码位置,以及为低代码搭建页面、运营页面动态渲染等提供解决方案和思路。
《Vue 3 企业级项目实战课》,新⼈⾸单¥59
全部留言(13)
- 最新
- 精选
- Turalyon置顶这个念经试的朗读听着脑瓜子疼2023-05-13归属地:重庆26
- 风太大太大Vue.js 3 非编译场景与 Vue.js 的 JSX 写法有什么联系吗? jsx写法是一个语法糖,最后会通过编译工具(babel)转化成 “非编译模式”的代码
作者回复: 不错不错
2022-11-21归属地:江苏12 - 周大大不论是createElementVNode、h、template、jsx都是为了生成vnode。h和createElementVNode用js写dom方式不友好,但是灵活。template和jsx用html写dom方式友好,但是templated不够灵活。jsx不仅拥有友好的书写方式,而且还可以通过{}实现动态值。
作者回复: 基本都答到了
2022-11-23归属地:江苏8 - 前端WLOP示例图好好看 是用什么软件画的呀
编辑回复: keynote ,绘图常用工具,图好看只能说明老师画图技巧到位😎
2022-11-29归属地:北京1 - 派大心Vue.js 3 非编译场景与 Vue.js 的 JSX 写法有什么联系吗? jsx的写法是来源自react,我想 Vue.js 的 JSX ,是可以帮助react开发者用熟悉的方式快速使用vue; Vue.js 的 JSX 写法 会编译转化成 Vue.js 3 非编译场景的代码;
作者回复: 我觉得这样理解也是有道理的,但jsx比template的动态性要比template灵活一些,这个是最根本的差异。
2022-11-23归属地:江苏1 - LVue.js 3 非编译场景与 Vue.js 的 JSX 写法有什么联系吗? jsx本质上还是需要走一段babel的编译过程,编译成vue可以识别的内容后再走vue的编译,好处是有的时候在编写代码的时候会更加的方便一点 对与运行时编译我有一个疑问,现在很多时候一些低代码的实现并不在浏览器端产出新的代码,而是通过一些渲染器之类的设计将json数据渲染成组件,对比将json数据转成实际的代码再进行vue运行时编译的方案的优劣是什么呢? 这样做性能会更加快并且后续的代码好维护吗?
作者回复: “Vue.js的JSX 写法”最终也会经过编译,变成可以在浏览器里直接运行的“非编译写法”。 对于低代码场景,“生产代码”的过程如果在“浏览器运行过程中”,也就是将json数据在浏览中“拼接Vue.js组件”,这个过程可能存在比较多的“计算过程”,同时生产的组件后带来的异常也很难定位排查。 如果“生产代码”的过程是在低代码的“搭建过程”,那么可以基于json数据,转成“语法树”来生成实际的Vue.js组件,对比浏览器生产组件,可以减少一些“计算过程”的耗时。与此同时,搭建过程生产了试纸的Vue.js组件,在运行过程中遇到异常,也比较方便排查定位问题。
2023-03-18归属地:上海 - powerVue.js 3 非编译场景与 Vue.js 的 JSX 写法有什么联系吗? jsx和vue.js3非编译场景都是为了表现vNode,jsx更方便开发者理解和书写,jsx最终会被编译成非编译模式
作者回复: 您好,首先Vue.js的JSX语法只是一种“语法糖”,是为了方便开发者可以选择JSX的语法方式开发代码,最终也是编译成“非编译模式”的代码。
2023-03-07归属地:广东 - Geek_b640fe浏览器直接运行,是指谷歌浏览器调试控制台直接运行吗
作者回复: 就是代码不需要经过编译就可以运行,所以称为:浏览器可以直接运行
2022-11-23归属地:江苏2 - Geek_b640fe浏览器直接运行,是指比如 google浏览器的调试控制台,直接复制运行下面的? import { toDisplayString, createElementVNode, openBlock, createElementBlock, ref, } from "Vue.js"; const _hoisted_1 = { class: "v-counter" } const _hoisted_2 = { class: "v-text" } const __sfc__ = { __name: 'App', setup(__props) { const num = ref(0) const click = () => { num.value += 1; } return (_ctx, _cache) => { return (openBlock(), createElementBlock("div", _hoisted_1, [ createElementVNode( "div", _hoisted_2, toDisplayString(num.value), 1), createElementVNode("button", { class: "v-btn", onClick: click }, "点击数字加1") ])) } } } __sfc__.__file = "counter.Vue.js" export default __sfc__
作者回复: 这是一种方法,只要不经过编译就能运行就是浏览器可以直接运行。比如写在html的script标签里没经过编译工具编译,也算是浏览器直接运行哈
2022-11-23归属地:江苏2 - 陈彪Vue.js 3的非编译场景与JSX写法之间的联系在于,JSX作为一种语法糖,它允许开发者使用类似HTML的标记语法来编写Vue组件。这种写法直观且易于理解,特别是对于熟悉HTML的开发者来说。JSX最终会被Babel编译器转换成Vue.js 3的非编译模式代码,这种代码是Vue.js虚拟DOM(vNode)的表现形式,是非编译场景下的标准写法。 在非编译场景下,Vue.js 3使用<template>标签来编写模板代码,这些模板代码会被编译成JavaScript中的vNode对象。而使用JSX时,开发者可以直接编写出这些vNode的结构,从而在源代码中更清晰地看到最终渲染的HTML结构,这样做有以下好处: ● 代码可读性:JSX的标记语法让代码更接近最终渲染的结果,提高了代码的可读性。 ● 开发体验:JSX可以提供更好的开发体验,例如在IDE中提供更好的自动完成和错误检查功能。 ● 递归组件:在处理递归组件时,JSX可以更容易地表达递归的模板结构。2024-03-01归属地:广东