Vite + Vue3 +Vant4构建项目时,按需引入使用Toast组件,引用 showToast 时出现编译报错的解决方案

这篇具有很好参考价值的文章主要介绍了Vite + Vue3 +Vant4构建项目时,按需引入使用Toast组件,引用 showToast 时出现编译报错的解决方案。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Vite + Vue3 +Vant4构建项目时,按需引入使用Toast组件,引用 showToast 时出现编译报错的解决方案

一.问题定位

在Vite + Vue3 +Vant4构建项目时,需要使用Toast组件显示提示信息,按照官方文档使用函数调用

/**函数调用
*为了便于使用 Toast,Vant 提供了一系列辅助函数,通过辅助函数可以快速唤起全局的 Toast 组件。
*比如使用 showToast 函数,调用后会直接在页面中渲染对应的轻提示。
*/

import { showToast } from 'vant';

showToast('提示内容');

使用后直接报错,说是找不到对应的样式文件(如下图):

vant showtoast,vue3,前端,javascript,html

在项目中查找node-moudles文件,确实没有找到,只有一个toast文件(如下图):

vant showtoast,vue3,前端,javascript,html

在百度搜索解决方法,说是需要单独引入以下样式文件:
vant showtoast,vue3,前端,javascript,html

但是,引用完之后依然报错,不管用。

继续查看官方文档,发现在官方文档最下方的常见问题里有解决方法:

Vant 从 4.0 版本开始不再支持 babel-plugin-import 插件,请参考 迁移指南 移除该插件。

vant showtoast,vue3,前端,javascript,html

vant showtoast,vue3,前端,javascript,html

按照官方文档说明,移除 babel-plugin-import插件,结果在项目中根本没使用该插件,到此为止,问题依然没有解决。



后来经过仔细观察发现,在项目文件vite.config.js中按需引入vant4时使用到了 vite-plugin-style-import 这个插件,

vant showtoast,vue3,前端,javascript,html

此时的 name 参数 其实就是 引入vant 组件的大括号内的名称,对比报错截图

vant showtoast,vue3,前端,javascript,html

既然show-toast/style/index找不到,那不妨直接修改路径 ,改为 toast/style/index

resolveStyle: (name) => {
          if (name == 'show-toast') {
            return `../es/toast/style/index`; //修改vant show-toast引入路径
          } else {
            return `../es/${name}/style/index`; //修改vant引入路径
          }
        },

修改后果然不再报错,局部注册和全局注册均正常:

vant showtoast,vue3,前端,javascript,html
vant showtoast,vue3,前端,javascript,html

二.以下为完整解决代码:

局部引入Toast

1.vite.config.js

import {
  defineConfig
} from 'vite';
import vue from '@vitejs/plugin-vue';
import {
  resolve
} from 'path'; //引入路径
import styleImport, {
  VantResolve
} from 'vite-plugin-style-import'; //按需引入插件

// https://vitejs.dev/config/
export default defineConfig({
  plugins: [
    vue(),
    styleImport({
      resolves: [VantResolve()], //引入vant
      libs: [{
        libraryName: "vant",
        esModule: true,
        resolveStyle: (name) => {
           if (name == 'show-toast') {
             return `../es/toast/style/index`; //修改vant引入路径
           } else {
             return `../es/${name}/style/index`; //修改vant引入路径
           }
         },
      }],
    }),
  ],
})

2.在使用组件的页面

<template>
  <div class="container" style="padding-top: 30px">
    <div style="display: flex; justify-content: center">
      <van-button type="primary" @click="showLocalToast"
        >显示局部toast消息</van-button
      >
    </div>
  </div>
</template>

<script setup>
import { ref, getCurrentInstance, onMounted } from "vue";
import { showToast } from "vant";//引入showToast

const showLocalToast = () => {
  showToast("我是局部toast消息");
};
</script>
全局引入Toast

1.vite.config.js

import {
  defineConfig
} from 'vite';
import vue from '@vitejs/plugin-vue';
import {
  resolve
} from 'path'; //引入路径
import styleImport, {
  VantResolve
} from 'vite-plugin-style-import'; //按需引入插件

// https://vitejs.dev/config/
export default defineConfig({
  plugins: [
    vue(),
    styleImport({
      resolves: [VantResolve()], //引入vant
      libs: [{
        libraryName: "vant",
        esModule: true,
        resolveStyle: (name) => {
           if (name == 'show-toast') {
             return `../es/toast/style/index`; //修改vant引入路径
           } else {
             return `../es/${name}/style/index`; //修改vant引入路径
           }
         },
      }],
    }),
  ],
})

2.在main.js全局引入

import {
    createApp
} from 'vue'
import App from './App.vue'

// 按需引入vant组件
import {
    showToast,
} from 'vant';
const app = createApp(App);
app.config.globalProperties.$toast = showToast; //全局使用showToast组件

app.mount('#app')

3.在使用组件的页面文章来源地址https://www.toymoban.com/news/detail-798306.html

<template>
  <div class="container" style="padding-top: 30px">
   <div style="display: flex; justify-content: center; margin-top: 50px">
      <van-button type="success" @click="showGlobalToast"
        >显示全局toast消息</van-button
      >
    </div>
  </div>
</template>

<script setup>
import { ref, getCurrentInstance, onMounted } from "vue";
const instance = getCurrentInstance(); //获取当前实例对象
const _this = instance.appContext.config.globalProperties; //vue3获取当前this
const showGlobalToast = () => {
  _this.$toast("我是全局注册消息");
};
</script>

到了这里,关于Vite + Vue3 +Vant4构建项目时,按需引入使用Toast组件,引用 showToast 时出现编译报错的解决方案的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 项目实战:《智慧线上购物商城》:基于vue3+vite+vant4组件(一)

    本项目主要是基于vue3和vite以及vant4组件所开发的移动端购物商城。项目没有接口,所运用的存储数据为json数据通过axios请求,以及Localstorage等技术实现数据。 开发的模型参考以下的网站,感兴趣的小伙伴可以去看看。 AxureShop原型演示 AxureShop原型演示 https://demo.axureshop.com/?

    2024年02月02日
    浏览(76)
  • Vant4在Vue3.3中如何按需导入组件和样式

    最近我在Vue 3.3的项目中对Vant4做按需导入时,尽管按照Vant4的官方指南进行操作,但样式仍然无法正确加载。经过深入研究和多篇文章的比较,我终于找到了在Vue3中如何正确的按需导入Vant 4组件和样式的方法。由于Vue3.3和Vant4相对较新,相关资料可能还不够完善,因此我认为

    2024年01月21日
    浏览(37)
  • vue3.2+vite+vant4+sass搭建笔记

    官方下载地址:https://github.com/coreybutler/nvm-windows/releases 双击安装                    在  vite.config.js  文件中配置插件  tips:函数组件样式有异常,在main.js中引入vant样式 1、安装插件 postcss-pxtorem 是一款 PostCSS 插件,用于将 px 单位转化为 rem 单位 lib-flexible 用于设置 rem 基

    2024年02月02日
    浏览(31)
  • vue3 vite直接创建项目 添加 element-ui 按需引入和全部引入

     创建home 工程 yran dev就可以看到一个网址 点进去就可以看到效果了 添加element-ui 之前的main.js 修改后的 element-plus 在vue3中的按需引入。要比2简介很多 。自动导入也是推荐的一种写法 我们注释掉全局引用  然后改为按需引入 源文件  修改后 首先安装两款插件 修改后

    2024年02月17日
    浏览(43)
  • Vue3+Vite项目引入Element-plus并配置按需自动导入

    我使用的是 pnpm ,并且顺便将 element-plus/icons 一起引入 如果您使用 Volar,请在根目录下 tsconfig.json 中通过 compilerOptions.type 指定全局组件类型 3.1 首先你需要安装 unplugin-vue-components 和 unplugin-auto-import 这两款插件 3.2 然后把下列代码插入到根目录下 vite.config.ts 文件中 Element-lus官

    2024年02月13日
    浏览(44)
  • Vite4+Pinia2+vue-router4+ElmentPlus搭建Vue3项目(组件、图标等按需引入)[保姆级]

    本文为快速搭建vite4项目,一些插件的详情就不做过多的解释,都放有官网链接,需要深入了解的小伙伴可自行查看。至于为什么选择使用vite,因为它具备着快速启动、按需编译、模块热更新的亮点。归根结底最大的特点就是 快 。vue的创始人是尤雨溪大佬,vite也是他。所以

    2023年04月19日
    浏览(36)
  • 【vue3】使用vite构建vue3项目

    ==😉博主:初映CY的前说(前端领域) ,📒本文核心:使用vite构建vue3项目 【前言】 当我们选择了vue3作为我们项目的开发,就更加的推荐使用vite来对我们的项目进行打包。很简单——这也是开发vue的团队开发的工具,因此支持性肯定比传统的打包工具好,下面我们就来使用vi

    2024年02月06日
    浏览(42)
  • Vue3+Vite项目按需自动导入配置及常见问题修复

    解决的问题:避免在每个vue组件中都重复性的去声明ref,reactive等。如下: 1.1 配置 unplugin-auto-import 具体配置: 安装vite插件: unplugin-auto-import 1.2 可能遇到ts,eslint不识别而导入报错的问题 1、typescript 报错: \\\'reactive\\\' is not defined. 原因 :TS未识别到vue api,没有相应的模块声明文件

    2024年02月16日
    浏览(41)
  • 搭建vue3项目+按需引入element-ui框架组件

    场景 :使用vue create脚手架快速搭建vue的项目 前提 :需要安装node.js和cnpm以及yarn 并且cnpm需要设置为淘宝镜像,cnpm和yarn安装教程网上很多可以自行搜索 查看安装的版本(显示版本号说明安装成功) 1.cmd窗口跳到需要新建项目的文件夹下,使用vue create 2.我这里选择第三个Ma

    2024年02月16日
    浏览(43)
  • Vue3+vite+vant UI移动端项目创建保姆级教程

    vue3 默认端口5173 想要把端口号修改为8088,在vite.config.js中写入 安装插件flexible (适配移动端) 在main.js中引入 安装 postcss-pxtorem (把px转化为rem) 安装这个之后 开发过程中就可以写px了 插件会自动转化为移动端单位rem 配置自动按需引入组件 安装插件 在vite.config.js中配置插件 适配

    2024年04月16日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包