如何在新的 Vue3 项目中使用 Vue2 旧组件(.vue 文件)?

Posted

技术标签:

【中文标题】如何在新的 Vue3 项目中使用 Vue2 旧组件(.vue 文件)?【英文标题】:How can I use Vue2 old component (.vue file) with a new Vue3 project? 【发布时间】:2021-01-15 05:04:22 【问题描述】:

Vue3 版本已经发布,但我没有看到任何在新版本中使用旧组件代码的示例。怎么会?

这是我的 index.html

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <title>Vue 3 Example using Vue 2 component</title>
    <script src="https://unpkg.com/vue@next"></script>
  </head>
  <body>
    <div id="app">
      <h1> product </h1>    
      <my-old-vue-component :my-prop="'my string in here'"></my-old-vue-component>
    </div>

      <script src="./main.js"></script>
      <script src="./myOldVueComponent.vue"></script>

    <!-- Mount App -->
    <script>
      const mountedApp = app.mount('#app')
    </script>
  </body>
</html>

这是我的 main.js:

const app = Vue.createApp(
  data() 
      return 
          product: 'my product',
      
  
)

这是我的旧的简单 Vue2 组件(myOldVueComponent.vue):

<template>

    <div>
        myProp
    </div>

</template>

<script>

  
    export default 
        name: "myOldVueComponent",
        props: 
            myProp:  type: String 
        ,
        data() 
            return 
               
        ,
       
    

</script>

我在导入“.vue”文件时遇到错误: 未捕获的语法错误: 意外的令牌' (意思是我的旧组件中的&lt;template&gt; 标签。

【问题讨论】:

是的,关于带有 .vue 文件在 vue3 上工作得很好,你的问题一定出在其他地方 尝试使用 JS 导入来添加组件,而不是添加脚本标签 【参考方案1】:

Vue2 组件在 Vue3 中工作。这不是您的代码中的问题。


问题出在这里:

<script src="./myOldVueComponent.vue"></script>

您不能直接在浏览器中导入 .vue 文件。你不能在 vue 1,2 中做到这一点,你还不能在 vue 3 中做到这一点。浏览器无法理解该语法,需要一个捆绑器来转换你的代码是浏览器可以使用的东西。最受欢迎的打包工具是 webpack、rollup ecc ecc

见:https://v3.vuejs.org/guide/single-file-component.html#for-users-new-to-module-build-systems-in-javascript

我强烈建议您使用 Vue cli 来设置您的项目,特别是如果您是 npm/bundlers 世界的初学者

【讨论】:

挂载没有变化,例如在旧代码中?什么都没有? 有一些变化,但它们仍然兼容,并且您得到的错误不是由 vue 2/vue 3 兼容性问题引起的 有重大更改,因此并非所有 vue 2 组件都与 vue 3 兼容。v3.vuejs.org/guide/migration/array-refs.html 重大更改之一,v-for refs in vue 2 分配给数组,v-for refs in vue 3 使用函数回调。 @gbalduzzi 你好,你从哪里读到“Vue2 组件在 Vue3 中工作”。 ?我很好奇,因为我找不到来源,我需要它,因为我想我听到了同样的事情。

以上是关于如何在新的 Vue3 项目中使用 Vue2 旧组件(.vue 文件)?的主要内容,如果未能解决你的问题,请参考以下文章

vue2升级vue3:Vue2/3插槽——vue3的jsx组件插槽slot怎么处理

带你体验Vue2和Vue3开发组件有什么区别

如何在 Vue 3 中使用来自 Vue2 Web 组件的插槽?

使用vue-demi来开发一个vue2和vue3组件

vue2.x和vue3.0在scss样式中使用深度选择器的区别

uniapp vue2项目迁移vue3项目