完整版和只包含运行时版的 Vue.js

243 阅读2分钟

两个版本的区别和使用方法

完整版: 同时包含编译器和运行时的版本。 vue.js

编译器: compiler,用来将模板字符串编译成为 JavaScript 渲染函数的代码。

运行时: 用来创建 Vue 实例、渲染并处理虚拟 DOM 等的代码。基本上就是除去编译器的其它一切。 vue.runtime.js

如果你需要在客户端编译模板 (比如传入一个字符串给 template 选项,或挂载到一个元素上并以其 DOM 内部的 HTML 作为模板),就将需要加上编译器,即完整版:

// 需要编译器
new Vue({
  template: '<div>{{ hi }}</div>'
})

// 不需要编译器
new Vue({
  render (h) {
    return h('div', this.hi)
  }
})

当使用 vue-loader 或 vueify 的时候,*.vue 文件内部的模板会在构建时预编译成 JavaScript。你在最终打好的包里实际上是不需要编译器的,所以只用运行时版本即可。

因为运行时版本相比完整版体积要小大约 30%,所以应该尽可能使用这个版本。如果你仍然希望使用完整版,则需要在打包工具里配置一个别名:

webpack

module.exports = {
  // ...
  resolve: {
    alias: {
      'vue$': 'vue/dist/vue.esm.js' // 用 webpack 1 时需用 'vue/dist/vue.common.js'
    }
  }
}

深入理解两种区别

最佳实践:总是使用非完整版,然后配合 vue-loader 和 vue 文件

  • 保证用户体验,用户下载的 JS 文件体积更小,但只支持 h 函数
  • 保证开发体验,开发者可以直接在 vue 文件里写 HTML 标签,而不写 h 函数
  • 脏活让 loader 做,vue-loader 把 vue 文件里的 HTML 转为 h 函数

如何用 codesandbox.io 写 Vue 代码

  • 进入网页 codesandbox.io/

  • 右上角直接创建 Create Sandbox,不用登陆,登陆只能创建50个项目,不登陆可以无限个

  • 然后选择 Vue 即可初始化一个Vue项目