美文网首页
vue3.0+ts+elementplus开发后台系统遇到的问题

vue3.0+ts+elementplus开发后台系统遇到的问题

作者: 廊桥梦醉 | 来源:发表于2023-08-05 15:59 被阅读0次

    说明:
       
      搭建项目用的是vue/cli4, vue@3.4, elementplus@2.3, ts@4.1, 边写项目, 边学习vue3.0, 边汇总遇到的问题,版本不同、书写方式不同(例如: 格式setup(props, context),或者<script setup>), 问题与解决方案可能有误差,而且ts的引入也会有一些新的要求去满足(比如:vue3获取ref实例结合ts的InstanceType), 读者有问题欢迎留言,一起探讨.

    项目中用到的语法格式

    <script lang="ts">

    export default defineCComponent({

        setup(props, context){

                return {}

        }

    })

    </script>

    1、在vue中报export ‘default‘ (imported as ‘Vue‘) was not found in ‘vue 

    代码格式:

    报错:

    我安装的vue/cli版本是@vue/cli 4.5.13, 引用文件如下图:

    cli3中是通过 import vue from ‘vue’的格式引入.

    解决2中思路:
    (1) 使cli4的格式
    (2) uninstall cli4, 安装cli3

    2、手动配置vuex、router, v2与v3差异化
          v3使用专门的api, v2需要手动实例化

    3、手动安装element-plus

    main.ts中引入格式如下

         错误提示:
    This dependency was not found:
     * element-plus/lib/theme-chalk/index.css in ./src/main.ts
     To install it,
    you can run: npm install --save element-plus/lib/theme-chalk/index.css

    解决办法:
    我去element-plus官网查询,发现其已经将其进行修改【第二行代码】

    运行正常.

    4、

    解决方案:https://blog.csdn.net/qq_54139028/article/details/126698066
    我在项目中应用了elment-plus, 报错的是引用在el-form表单中的变量,提示属性不存在, 在项目中使用以上方法未生效.

    5、vue解决less-loader报错this getOptions is not a function 

         原因:less-loader的版本太高了,webpack与less-loader的版本兼容导致的

    解决方案:

    下载高版本: npm uninstall less less-loader

    重新安装低版本

    npm install less@3.9.0 less-loader@5.0.0 --save-dev

    6、vue提示Already included file name '.../components/TagsView.vue' differs from file name

    明明引入的文件名和地址都是正确的,但是还是报错误

    解决方案:
    把文件名的后缀vue去掉
    把路径前面的点改成@

    在子组件中加载子组件依然存在这个问题,对了,我懒得配置ts.config.json,因为我的组件路径比较深,配置后并不方便,重要的是页面正常显示且组件引入使用相对路径查找更方便.

    紧接着会出现问题7

    7、Cannot find module '@/components/nav/component/navleft/Navleft' or its corresponding type declarations.Vetur(2307)

    原因: 当script 标签上加上lang="ts" 时就会出现这个问题。因为tsconfig.json 没有配置

    8、子组件加载成功,但是不显示子组件内容,组件高度为0

    子组件需要写在components里

    9、element-plus去掉el-dropdown 点击之后显示的蓝色边框

    解决方案

    参考:https://www.jianshu.com/p/24e7d4f5b50d

    10、修改packge.json文件的name属性报错

    npm ERR! Invalid name: "后台管理系统"

    npm ERR! A complete log of this run can be found in:

    npm ERR! /Users/apple/.npm/_logs/2023-09-05T11_52_59_602Z-debug.log

    name属性不能是中文

    参考:https://blog.csdn.net/weixin_45711931/article/details/130399946

    11、更改项目标题的方式

    vue.config.js配置chainWebpack

    参考:https://zhuanlan.zhihu.com/p/570272839

    12、关闭any警告

    警告:

    warning Unexpected any. Specify a different type @typescript-eslint/no-explicit-any

    解决:eslintrc.js文件添加rules配置

      添加完成之后,重新运行项目即可

    参考:https://blog.csdn.net/weixin_42744724/article/details/128898447

    13、

    Argument 'state' should be typed with a non-any type.
    eslint@typescript-eslint/explicit-module-boundary-types(parameter) state: any

    解决方案:
    写接口定义state类型

    14、elementPlus中icon的使用
     参考:官网关于icon的用法,结合component的is属性动态渲染icon

    15、vue3中各个钩子的使用
    参考:https://www.python100.com/html/3RS6K3NT85N3.html

    16、ref的使用

    使用ref函数定义一个变量,ref扩号里是变量的初始值

     import { ref } from 'vue'
        let conter=ref(0)
        let arr=ref(['我是字符串'])

    template里的用法

    <button @click="conter++">{{conter}}</button>
     <div v-for="item in arr">  
        <p>{{item}}</p>
     </div>

    js里的用法

    function add(){
         conter.value++
         console.log(conter)
          arr.value.push('耗子尾汁')
    }

    17、vue3.0 区分生产环境,测试环境,正式环境

    1.在根目录下新建.env.xxx文件

    2、不同环境配置

    测试环境

    开发环境

    生产环境

    文件中根据 process.env.NODE_ENV 来区分不同环境,设置不同域名

    3、输出目录配置
          通过  process.env.outputDir 直接获取

    4、 如果分测试环境和正式环境,npm run build时会打包两次。修改根目录下的 package.json

    // 在scripts中加入以下代码
    --mode production  // 打包正式环境
    --mode development // 打包开发环境
    --mode test  // 打包测试环境

    拓展:https://www.jianshu.com/p/3917d97f8b96

    18、node版本管理nvm配置过程遇到的问题
          mac已安装node的卸载
          nvm提示安装失败
          nvm安装成功和重启终端后两种情况zsh终端报错  zsh: command not find:nvm

         解决方案参考我的另一个文章: https://www.jianshu.com/p/8f79fa2fe035

    19、vue 运行报错 TypeError: Cannot read property 'upgrade' of undefined

    原因:vue.config.js中devServer设置了proxy,但target为空,将target设置一个地址即可。

    解决方案: target 设置成非空

    20、vue中的hooks

    hooks就是函数的一种写法,就是将文件中一些单独功能的js代码抽离出来,放到单独的js文件中,或者说是一些公共的功能或者方法.vue3.0中的hooks跟vue2.0中的mixin有点类似,相比较hooks更清晰复用代码的来源,更清晰易懂.

    21、vue3.0中使用ref来调用子组件实例(vue3获取ref实例结合ts的InstanceType)
              参考: https://www.jb51.net/javascript/2953413t9.htm
            父组件定义ref绑定子组件时候,InstanceType很重要()

    (1)< script setup >通过ref获取子组件的值或方法。(我的项目中未实践)

    关于defineExpose的使用 
           defineExpose: 子组件使用defineExpose暴露变量或者方法给父组件
           defineExpose的变量在子组件一定也要return

    (2)setup()通过ref获取子组件值 (我的项目中使用的是这种方式)
         子组件

    父组件

    22、vue3 defineEmits的使用
    参考:https://blog.csdn.net/weixin_47228574/article/details/128144067

    23、vue3.0中使用nextTick
    参考:https://blog.csdn.net/qq_41619796/article/details/118996974

    24、.eslintrc.js文件中【globals】下配置【defineEmits: true】

    25、vue3中setUp函数的2个参数详解
       参考: https://blog.51cto.com/u_12553473/5642509

    26、vue3.0监听props
       参考: https://blog.csdn.net/LJJ_3/article/details/119117788

    vue3.0+ts+elementPlus后台系统, 源码地址 https://git@github.com:wangAlisa/vue3.0-ts-elementPlus.git

    持续更新中

    网上搜罗来的:
    http://www.taodudu.cc/news/show-5155435.html?action=onClick
    https://juejin.cn/post/7006108454028836895

    相关文章

      网友评论

          本文标题:vue3.0+ts+elementplus开发后台系统遇到的问题

          本文链接:https://www.haomeiwen.com/subject/vwabpdtx.html