Vue 3 企业级项目实战课
杨文坚
前阿里前端 Leader,前腾讯 IMWeb 团队高级前端工程师
6908 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 47 讲
实战篇 (19讲)
Vue 3 企业级项目实战课
15
15
1.0x
00:00/00:00
登录|注册

01|编译和非编译模式:离开Vue工具,你还知道怎么用Vue 3吗?

你好,我是杨文坚。
在开始讲解今天课程之前,我们来想象一下这么一个场景:当 Vue.js 代码在生产环境中报错了,你该如何快速根据生产环境编译后的代码,进行问题定位和排错呢?
代入到这个场景中,你是否会感到无解?虽然说,得益于 Vue.js 丰富的“全家桶”式开发工具,我们能够低成本地直接使用开发项目,无需关心繁琐的项目构建配置,但这也很容易让新同学产生依赖,甚至误解。
比如误解 Vue.js 这类语法是浏览器默认就支持的,不清楚 Vue.js 代码在浏览器中实际的运行方式等等。这种浅尝辄止式的学习,会给我们实际的开发工作带来一些小麻烦。
所以,我们一定得清楚 Vue.js 在非编译的情况下是如何使用的,这样即便我们脱离了 Vite、Webpack 和 Rollup 等构建工具,也能让 Vue.js 3 在浏览器中正常运行。同时,你也可以通过这节课理解 Vue.js 的代码是如何进行编译,让浏览器识别运行的。

Vue.js‌ 3 代码编译结果是什么样子的?

在开始讲解 Vue.js 非编译模式的运行原理之前,我想先带你了解下 Vue.js 代码编译结果是怎样的。我们都知道,Vue.js 代码经过编译后才能在浏览器运行,而且,Vue.js 代码编译后的结果就是基于非编译语法来运行的。这能让你更好地理解 Vue.js 非编译模式的运行原理。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

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归属地:重庆
    2
    6
  • 风太大太大
    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
  • L
    Vue.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归属地:上海
  • power
    Vue.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归属地:广东
收起评论
显示
设置
留言
13
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部