vue.js设计与实现-框架设计核心要素

450 阅读2分钟

提升用户开发体验

  • 提供友好的警告信息,通过warn函数实现
  • 提供自定义输出格式,通过initCustomFormatter实现

利用Tree-Shaking机制配合预定义常量控制框架体积的大小

  • _DEV_常量来控制警告信息只在开发环境下打印;
  • Tree-Shaking指的就是消除那些永远不会被执行的代码,也就是排除dead code。
  • 由于Tree-Shaking是依赖ESM构建的,其必须满足一个条件,即模块必须是ESM(ESModule);
  • Tree-Shaking第二个关键点是副作用,如果一些代码会产生副作用,将不会被移除。副作用指如果调用一个函数的时候对外部产生影响,例如修改了全局变量。
  • 由于JavaScript是动态类语言,静态分析哪些是dead code 比较麻烦,注释代码/* #PURE*/ 告诉rollup.js、webpack以及压缩工具(如terser)此函数或语句不会产生副作用,可以进行Tree-Shaking;
  • vue.js3会在一些顶级调用的函数上使用/* #PURE*/注释

框架的构建物产出

  • <script>标签直接引用并使用,输出IIFE格式的资源,即立即执行函数
  • 输出ESM格式的资源

带有-bundler字样的ESM资源是给rollup.js或webpack等打包工具使用的; 带有-browser字样的ESM资源是直接给<script type="moudle">使用的

  • 在node.js环境中,资源格式是CommomJS,简称cjs。

特性开关

用户可以通过特性开关关闭对应的特性,这样打包的时候,用于实现关闭功能的代码将会被Tree-Shaking机制排除。

VUE_OPTIONS_API

选项对象式API和组合式API都能用来实现页面的开发,若用户明确自己只会使用组合式API,而不会使用对象式API,可以使用_VUE_OPTIONS_API_开关来关闭该功能

new webpack.DefinePlugin({
    _VUE_OPTIONS_API_:JSON.stringify(true);
})

错误处理

框架为用户提供统一的错误处理接口,用户通过注册自定义的错误处理函数来处理全部的框架异常

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