特性开关
vue3在设计时使用了名为特性开关的模式,该模式可以让用户自行选择对应的配置,对于用户关闭的特性,可以利用 Tree-Shaking 机制让其不包含在最终的资源中,增加了框架的灵活性
特性开关:对某些功能设置一个变量,用户可以通过该变量的值来控制对应的功能是否进行打包.
由于vue3中保留了vue2的option api写法,但是如果用户不需要用到保留的写法,可以在特性开关中选择关闭,从而减少打包代码体积,如下图是源码中的一部分,其实只是对一个常量进行一个简单的判断。在这里__CFEATURE OPTIONS API__则是一个特性开关
//support for 2.x options
if(__FEATURE_OPTIONS_API__){
currentInstance = instace
pauseTracking()
applyOptions(instance,Component)
restTracking()
currentInstance = null
}
关于如何设置常量的值,则是通过在webpack中使用DefinePlugin插件来实现
//webpack.DefinePlugin 插件配置
new webpack.DefinePlugin({
__VUE_OPTIONS_API:JSON.stringify(true)//开启特性
})
}
但是如果明确知道自己不会使用选项API,用户就可以使用 开关来关闭该特性,这样在打包的时候 Vue.js 的这部分代码就不会包含在最终的资源中,从而减小资源体积
控制参数
以下是一些特性开关的参数,通过控制开关来对不同的功能进行开放和限制,达到不同场景下用户的需求。
devtools:该开关控制 Vue 3 是否使用开发工具,可以在开发中使用 Vue 3 的开发工具进行更好的调试和开发体验。performance:该开关控制 Vue 3 是否开启性能优化,可以让 Vue 3 在运行时执行一些额外的优化来提高性能。globalProperties:该开关控制 Vue 3 是否支持全局属性,可以让开发者在应用程序中定义全局属性,从而提高开发效率。legacy:该开关控制 Vue 3 是否使用旧版的语法和行为,可以让开发者在升级到 Vue 3 之后,继续使用旧版的语法和行为,从而降低学习成本和迁移成本。isCustomElement:该开关控制 Vue 3 是否将自定义元素视为合法的 Vue 组件。打开该开关,可以让开发者使用自定义元素来开发 Vue 组件,从而扩展了 Vue 3 的功能和应用场景。
本文正在参加「金石计划」