Vue CLI 中 Runtime-Compiler和Runtime-only的区别


—文章首发—


在我们初始化vue项目的时候,会让我们选择 Runtime-Compiler 还是 Runtime-only 。
在这里插入图片描述
那我们就来看一下他们有什么区别
Runtime-Compiler:编译器版本。
Runtime-only:运行时版本。

如果你需要在客户端编译模板(例如,向 template选项传入一个字符串,或者需要将模板中的非DOM的HTML挂载到一个元素),你需要带有编译器的版本,因而需要完整构建版本。

// 这种情况需要编译器
new Vue({
	template:`<div>{{message}}</div>`
})

// 这种情况不需要编译器
new Vue({
  render(h){
  	return h('div',this.message)
  }
})

在使用vue- loader或 verify时,*.vue文件中的模板会在构建时(build time)预编译pre-compile)为 Javascript。最终生成的 bundle中你不再需要编译器( compiler,因此可以直接使用只含有运行时的构建版本( runtime-only)。

由于只含有运行时构建版本 (runtime-only比完整构建版本(full- build轻量大约30%,你应该尽可能使用只含有运行时的构建版本。如果你还是希望使用完整构建版本,则需要在打包器中配置别名:

由于运行时版本的构建比其全面版本的重量轻约30%,Runtime-only 性能更高,代码量更少,因此你可以随时使用它。如果你仍然希望使用完整版本,则需要在捆绑程序中配置别名。


总结

如果在之后的开发中,你依然使用 template ,就需要选择 Runtime-Compiler 。
如果在之后的开发中,使用的是 .vue 文件夹开发,那么可以选择 Runtime-only 。



关于他们的底层知识。

Runtime-Compiler 和 Runtime-only

为什么存在这样的差异呢?

我们需要先理解Vue应用程序是如何运行起来的。

Vue中的模板如何最终渲染成真实DOM。

我们来看下面的一幅图。

Vue程序运行过程中

Runtime-Compiler 执行步骤

template --> ast --> render --> vdom --> UI

Runtime-only 执行步骤(性能更高,代码量更少)

render --> vdom --> UI

Runtime-only 在执行代码的时候,直接就到render 了,减少template --> ast --> render 的代码量,性能更高。

<think>我们有两个引用:[^1]、[^2]、[^3]都提到了Vuevue-template-compiler版本不一致的问题。根据用户当前问题:vue@2.6.14vue-template-compiler@2.7.16不匹配。解决方案的核心:确保vuevue-template-compiler的版本严格一致。步骤:1.检查当前安装的版本:-vue:2.6.14-vue-template-compiler:2.7.162.问题:这两个版本不一致,需要将它们调整为相同的版本。3.调整方法:-方案1:将vue升级到2.7.16(因为vue-template-compiler是2.7.16,所以将vue也升级到相同版本)-方案2:将vue-template-compiler降级到2.6.14(与vue版本保持一致)4.注意:根据引用[3],Vue2.0的最新版本是2.7.16(已废弃2.6.x?),但实际上2.6.14也是Vue2的一个版本。不过,官方推荐使用相同版本,且2.7是Vue2的最终版本。5.建议:升级到Vue2.7.16,因为2.7版本包含了一些改进长期支持。但需要注意,升级可能会引入一些破坏性变更,需要测试。6.具体操作:-升级vue到2.7.16(同时升级vue-template-compiler到2.7.16):```bashnpminstallvue@2.7.16vue-template-compiler@2.7.16```或使用yarn:```bashyarnaddvue@2.7.16vue-template-compiler@2.7.16```-或者,如果不想升级vue,则降级vue-template-compiler到2.6.14:```bashnpminstallvue-template-compiler@2.6.14```或```bashyarnaddvue-template-compiler@2.6.14```7.验证:运行项目,检查是否还有版本不匹配的警告。8.注意:如果使用vue-loader,确保vue-loader的版本兼容。对于vue@2.62.7,vue-loader的版本要求是>=10.0,所以如果vue-loader版本过低,可能也需要更新。9.引用[2]提到:如果使用vue-loader@>=10.0,更新vue-template-compiler即可;如果使用vue-loader@<10.0,需要重新安装vue-loader以更新vue-template-compiler。因此,在调整版本后,如果问题仍然存在,请检查vue-loader的版本。总结步骤:1.确定要使用的Vue版本(2.6.14或2.7.16)。2.调整vuevue-template-compiler到相同的版本。3.检查vue-loader版本,确保其兼容性(建议使用最新兼容版本)。根据用户当前安装的vue是2.6.14,如果用户不想升级Vue,则降级vue-template-compiler到2.6.14是最直接的方法。如果用户愿意升级,则升级到Vue2.7.16。相关问题:1.如何检查当前项目中安装的Vuevue-template-compiler版本?2.升级Vue2.6到2.7需要注意哪些兼容性问题?3.除了版本匹配,还有哪些常见的Vue项目构建错误?</think>### Vuevue-template-compiler版本不匹配解决方案 您遇到的问题是由于Vue核心库(`vue@2.6.14`)与模板编译器(`vue-template-compiler@2.7.16`)版本不一致导致的。Vue严格要求这两个包的版本必须**完全相同**,否则会导致编译错误[^2]。以下是具体解决步骤: #### 解决方案 1. **降级vue-template-compiler**(推荐) 将编译器版本降至与Vue核心库一致的2.6.14: ```bash npm uninstall vue-template-compiler npm install vue-template-compiler@2.6.14 ``` 或使用yarn: ```bash yarn remove vue-template-compiler yarn add vue-template-compiler@2.6.14 ``` 2. **升级Vue核心库** 若您希望使用最新版本,需同时升级Vue核心库: ```bash npm install vue@2.7.16 vue-template-compiler@2.7.16 ``` 注意:Vue 2.7是Vue 2的最终版本,包含部分Vue 3特性[^3]。 #### 验证步骤 安装后检查`package.json`确保版本严格匹配: ```json { "dependencies": { "vue": "2.6.14", "vue-template-compiler": "2.6.14" } } ``` 运行`npm ls vue-template-compiler`验证安装结果,应显示: ```bash vue-template-compiler@2.6.14 ``` #### 根本原因 该问题通常由以下情况引发: - 项目初始化时版本指定错误 - 使用`npm update`或`yarn upgrade`时未锁定版本 - 不同包管理器(npm/yarn)的缓存机制差异[^1] #### 预防措施 1. 始终同步安装两个包: ```bash npm install vue@x.x.x vue-template-compiler@x.x.x ``` 2. 在`package.json`中使用精确版本号(避免`^`或`~`) 3. 删除`node_modules``package-lock.json`后重新安装 > **重要提示**:Vue 2.6.x与2.7.x存在API差异,升级前需测试兼容性。若使用Vue CLI,需确保`@vue/cli-service`版本兼容[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值