「前端每日一问(64)」Vue3 项目打包时如何关闭 options API ?

1,023 阅读3分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第29天,点击查看活动详情

本题难度:⭐ ⭐

本题类型:Vue、工程化

答:把构建时的全局常量 __VUE_OPTIONS_API__ 置为 false

讲解

我们知道,Vue3 新推出了 composition API,也兼容 Vue2options API

如果项目中没有使用 options API,只使用了 composition API,有没有办法把 Vue3options API 这部分实现给抹去呢?

答案是有。

Vue3 对开发者非常友好,其中有一个功能就是特性开关,假设 Vue3A、B、C 三个特性,同时也提供了 a、b、c 三个对应的特性开关,用户可以设置 a、b、ctrue 或者 false 来开启或关闭对应的特性,这样有两个好处。

  • 对于用户关闭的特性,Vue3 内部有 Tree-Shaking 机制,这个特性不会被打包进最终的构建资源中。
  • 符合 Vue 渐进式开发的理念,项目的设计更加灵活,需要就用,不需要就不用,不用担心资源体积过大。当项目升级时,也可以随时开启特性来支持某些 API

VUE_OPTIONS_API

其中,__VUE_OPTIONS_API__ 就是一个特性开关,开发者可以设置 __VUE_OPTIONS_API__ 为 false,来关闭 options API 这个特性。

接下来,我们来实验一下。

vite 项目为例,随便起一个 vue3 项目,执行打包命令,最终打包出来的文件如下:

image.png

可以看到,vendeor.js 最终的体积是 50.29 KB

接下来,在 define 选项里把 __VUE_OPTIONS_API__ 置为 false:

image.png

再次打包。

image.png

可以看到,vendeor.js 的体积变成了 43.91 KB,因为源码里关于 options API 的逻辑都没了。

虽然没减少多少体积,但这是一个性能优化的思路,我们还可以关闭其他特性嘛。

而且性能优化就是这样,是一个积少成多的过程,蚊子再小也是肉。

但是现在问题来了,如果把 options API 这个特性关闭了,又在项目中使用了 options API,最终打包会怎么样?

阿林已经测试过了,直接给出答案:使用了 options API 的组件会像没引入一样,直接失效了。

所以说,如果关闭这个特性,可能会导致某些组件无法使用的 bug

目前,eslintvue3 插件,似乎没有约束 options API 不能使用的规则。

所以,要在项目中关闭这一特性,最好在项目文档上说明一下,明确约定不使用 options API

当然,如果你比较厉害也有时间,也可以给 eslintvue3 插件提 PR,加一下 Vue3 约束 options API 不能使用的规则。

结尾

本文参考:Vue.js设计与实现

阿林水平有限,文中如果有错误或表达不当的地方,非常欢迎在评论区指出,感谢~

如果我的文章对你有帮助,你的👍就是对我的最大支持^_^

我是阿林,输出洞见技术,再会!

上一篇:

「前端每日一问(63)」长度最小的子数组

下一篇:

「前端每日一问(65)」Vue3 如何进行统一错误处理?