首页 > 其他分享 >《Vue.js设计与实现》学习笔记_第二章 框架吗设计的核心要素

《Vue.js设计与实现》学习笔记_第二章 框架吗设计的核心要素

时间:2025-01-13 23:28:12浏览次数:3  
标签:Vue 常量 框架 Tree 用户 DEV js 设计 Shaking

目录

1.提升用户的开发体验

2. 控制框架代码的体积

3. 框架要做到良好的Tree-Shaking

4. 框架应该输出怎样的构建产物

5. 特性开关

6. 错误处理

7. 良好的TypeScript类型支持


1.提升用户的开发体验

提供友好的警告信息有助于开发者快速定位问题。

提供必要的警告信息:warn函数,最终就是调用了console.warn函数。

其他方面:可以通过在浏览器编写自定义的formatter,从而自定义输出形式。以 Chrome为例,我们可以打开DevTools 的设置,然后勾选 “Console” 一> “Enable custom formatters"选项,如图1所示。

图1 勾选 “Console” 一> “Enable custom formatters"选项

结果对比:当我们在控制台打印一个ref数据时,结果如图2所示。

const count = ref(0)
console. log (count)

图2 控制台输出结果

当通过勾选 “Console” 一> “Enable custom formatters"选项后,输出结果会变的非常直观,如图3所示。

图3 直观的输出内容

2. 控制框架代码的体积

Tree-Shaking 机制,配合构建工具预定义常量的能力。例如预定义_DEV_常量,从而实现仅在开发环境中打印警告信息,而生产环境中则不包含这些用于提升开发体验的代码,从而实现线上代码体积的可控性。

if (_DEV_ && !res)
    warn(
        'Failed to mount app: mount target selector "${container)" returned null.'s
    )
}

原理是:当Vue.js构建用于开发环境的资源时,会把_DEV_常量设置为 true,而当用于构建生产环境的资源时,会把_DEV_常量设置为false(实际上是通过rollup.js的插件配置来预定义的)。这样就做到了在开发环境中为用户提供友好的警告信息的同时,不会增加生产环境代码的体积。

3. 框架要做到良好的Tree-Shaking

Tree-Shaking是一种排除 dead code 的机制,框架中会内建多种能力,例如 Vue.js 内建的组件等。对于用户可能用不到的能力,我们可以利用Tree-Shaking 机制使最终打包的代码体积最小化。另外,Tree-Shaking 本身基于ESM,并且 JavaScript 是一门动态语言,通过纯静态分析的手段进行 Tree-Shaking 难度较大,因此大部分工具能够识别/*#_PURE_*/注释,在编写框架代码时,我们可以利用/*#_PURE_*/ 来辅助构建工具进行 Tree-Shaking。

import {foo} from'./utils'
/*#__PURE_*/ foo()

4. 框架应该输出怎样的构建产物

为了让用户能够通过<script>标签直接引用并使用,我们需要输出 IIFE 格式的资源,即立即调用的函数表达式。
为了让用户能够通过<script type="moduLe">引用并使用,我们需要输出ESM 格式的资源。这里需要注意的是,ESM 格式的资源有两种:用于浏览器的 esm-browser.js 和用于打包工具的esm-bundlerjs。它们的区别在于对预定义常量_DEV_的处理,前者直接将_DEV_常量替换为字面量 true 或 false,后者则将_DEV_常量替换为 process.env.NODE_ENV !== 'production'语句。

5. 特性开关

实现原理与_DEV_常量一致,本质上是利用rollup.js的预定义常量插件来实现的。对于用户关闭的特性,可以利用 Tre-Shaking 机制让其不包含在最终的资源中。该机制为框架设计带来了灵活性,可以通过特性开关任意为框架添加新的特性,而不用担心资源体积变大。

如果明确使用组合式AP1,而不会使用选项对象式 API,这时用户可以通过特性开关关闭对应的特性,这样在打包的时候,用于实现关闭功能的代码将会被 Tree-Shaking 机制排除。

//Vue.js2 选项式API
export default {
    data(){},//data 选项
    computed:{},//computed 选项
    // 其他选项
}
//Vue.js3中,推荐使用组合式API
export default {
    setup(){
        const count = ref(0)
        const doubleCount = computed(()=> count.value*2) //=Vue.js2中的computed 选项
    }
}

6. 错误处理

框架的错误处理做得好坏直接决定了用户应用程序的健壮性,同时还决定了用户开发应用时处理错误的心智负担。框架需要为用户提供统一的错误处理接口,这样用户可以通过注册自定义的错误处理函数来处理全部的框架异常。

import App from 'App. vue'
const app = createApp(App)
app.Config.errorHandler =()=>{
    // 错误处理程序
}

7. 良好的TypeScript类型支持

Typescript 是由微软开源的编程语言,简称TS,能够为 JavaScript 提供类型支持。例如:获得函数返回值的数据类型。

标签:Vue,常量,框架,Tree,用户,DEV,js,设计,Shaking
From: https://blog.csdn.net/weixin_61586448/article/details/145124907

相关文章

  • 设计模式:策略模式——行为型模式
    目录主要组成优点缺点使用场景:示例代码普通写法:策略模式:策略模式与if-else的关系: 区别总结策略模式(StrategyPattern)是一种行为型设计模式,旨在通过定义一系列的算法(或策略),将每个算法封装起来,使它们可以互换,并使得算法的变化独立于使用算法的客户端。主要组成......
  • js对DOM 的操作
    js操作的DOM可以分为三个类型1.属性操作2.css类3.样式首先列举一下js获取DOM的方法访问单个元素的方法document.querySelector()document.getElementById()访问所有元素的方法document.querySelectorAll()document.getElementsByClassName()document.getElementsByTag......
  • Vue.js组件开发-实现图片裁剪
    在Vue.js中开发一个图片裁剪组件,可以使用cropperjs库,它是一个功能强大的JavaScript库,专门用于图片裁剪。在Vue项目中,可以通过vue-cropperjs这个Vue包装器来更方便地使用cropperjs。步骤:1.安装依赖首先,需要安装cropperjs和vue-cropperjs:npminstallcropperjsvue-cropperj......
  • springboot毕设 广西美食宣传系统的设计与实现 程序+论文
    本系统(程序+源码)带文档lw万字以上文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景广西,这片位于中国南疆的神奇土地,以其丰富的自然资源和独特的民族文化孕育了众多令人垂涎的美食。从桂林米粉的细腻滑爽,到北海海鲜的鲜美肥嫩,再到柳州......
  • 4位二进制乘法器设计与实现:从逻辑门到LED显示的完整硬件乘法解决方案(含有源码资料)
    一、设计目的:**理解数字乘法运算:**通过实现一个4位乘法器,深入理解乘法的硬件实现原理,掌握乘法的位级操作。**学习数字逻辑设计:**通过使用逻辑门、乘法器电路、开关和LED等元件,了解数字逻辑设计的基础知识。**掌握输入/输出接口:**通过拨码开关和发光二极管(LED),学习如何将输......
  • 基于STM32C6T6的智能小车设计:自动寻迹、避障与无线控制全解析(含有源码资料)
    一、设计要求:1.1功能要求:设计并制作一个基于STM32C6T6核心板的智能小车,具备自动寻迹、避障和无线控制功能。小车应能够沿着不规则的黑色轨迹行驶,遇到障碍物时能够自动绕行,并可通过蓝牙模块进行无线控制。自动寻迹:小车应能够沿着不规则的黑色轨迹行驶,根据五路灰度循迹模块的......
  • 单例模式(Singleton Pattern)——游戏开发常用设计模式(一)
    前言单例模式应该是在unity游戏开发中最简单最常用的设计模式之一,无论是管理全局游戏状态、处理资源加载,还是控制音频播放,单例模式都能为我们提供一个简洁的解决方案——确保一个类只有一个实例,并允许在游戏的任何地方轻松访问它。然而,这种便利性也伴随着潜在的风险,比如代码耦合......
  • JSP篮球论坛网站设计与实现8lb36(程序+源码+数据库+调试部署+开发环境)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容一、研究背景与意义篮球运动在全球范围内拥有广泛的爱好者群体,他们渴望有一个交流心得、分享比赛视频的互动平台。然而,现有的篮球论坛大多功能单一......
  • JSP昆明城市学院勤工俭学网emasw--(程序+源码+数据库+调试部署+开发环境)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容一、研究背景随着高等教育的普及,越来越多的学生选择通过勤工俭学来减轻家庭经济负担并积累实践经验。昆明城市学院作为一所位于昆明市的高校,学生勤......
  • C#中的设计模式:构建更加优雅的代码
    C#在面向对象编程(OOP)方面的强大支持,我们可以探讨“C#中的设计模式”。这不仅有助于理解如何更好地组织代码,还能提高代码的可维护性和可扩展性。引言设计模式是软件工程中经过实践验证的解决方案模板,它们提供了一种标准化的方法来解决常见的开发问题。对于使用C#进行开发......