vue3+vite项目中按需引入vant报错:Failed to resolve import的解决方案

yizhihongxing

这里给出基于Vue3和Vite的项目中,使用按需引入 Vant UI 组件库所遇到的 "Failed to resolve import" 报错的解决方案。

问题描述

在使用 Vite 构建 Vue 3 项目时,按需引入 Vant UI 组件库时会出现以下报错:

Failed to resolve import '../lib/.../style.css' from '@/index.css'

解决方案

方案一:安装插件

Vite 是一个基于原生 ES Modules 的构建工具,而 Vant 库是基于 CommonJS 模块编写的,因此在使用的时候需要帮助 Vite 将 CommonJS 模块转化为 ES Modules。

这里我们可以使用 vite-plugin-style-import 插件它支持将 Vant 库中的样式文件转化为 ES Modules,用于在 Vue 3 项目中按需引入。

具体安装步骤如下:

  1. 安装 vite-plugin-style-import 插件
npm install vite-plugin-style-import -D
  1. vite.config.js 文件中配置插件
// vite.config.js
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import styleImport from 'vite-plugin-style-import'

// https://vitejs.dev/config/
export default defineConfig({
  plugins: [
    vue(),
    styleImport({ // 配置样式插件
      libs: [
        {
          libraryName: 'vant',
          esModule: true,
          resolveStyle: (name) => `vant/es/${name}/style`
        }
      ]
    })
  ]
})
  1. main.js 中引入样式文件
import { createApp } from 'vue'
import App from './App.vue'
import 'vant/lib/index.css' // 引入vant样式
import router from './router'

createApp(App).use(router).mount('#app')

方案二:手动配置

如果不想使用插件,也可以手动在 vite.config.js 文件中配置 styleImport 解析器:

// vite.config.js
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'

const path = require('path');

export default defineConfig({
  plugins: [vue()],
  resolve: {
    alias: {
      // 需要修改为Vant组件库实际的目录 ,具体路径请根据项目实际情况而定
      'vant': path.resolve(__dirname, './node_modules/vant')
    }
  },
  css: {
    preprocessorOptions: {
      less: {
        modifyVars: {
          // 可在这里自定义主题颜色
        }
      }
    }
  }
})

然后在 main.js 中引入样式文件:

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

import 'vant/lib/index.css' // 引入vant样式

createApp(App).mount('#app')

示例说明

以按需引入 Vant 的 Button 组件为例:

  1. 安装 vant 库:
npm install vant -S
  1. 在需要使用 Button 组件的.vue 文件中按需引入组件:
<template>
  <van-button class="btn">Button</van-button>
</template>

<script>
import { Button } from 'vant'

export default {
  components: {
    [Button.name]: Button,
  },
}
</script>

<style lang="less" scoped>
.btn {
  margin-top: 20px;
}
</style>
  1. vite.config.js 文件中,根据使用的方案,添加相应的插件或配置解析器即可。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:vue3+vite项目中按需引入vant报错:Failed to resolve import的解决方案 - Python技术站

(0)
上一篇 2023年5月28日
下一篇 2023年5月28日

相关文章

  • 3分钟迅速学会Vue中methods方法使用技巧

    3分钟迅速学会Vue中methods方法使用技巧 简介 在Vue组件里,methods方法是非常重要的一部分,它是用来存放组件内部方法的地方。在使用Vue的时候,熟练掌握methods的使用技巧,能够提高开发速度和代码可读性。 基本使用方法 在Vue组件中,我们可以定义多个methods方法,类似于下面的例子: <template> <di…

    Vue 2023年5月28日
    00
  • vue中引入路径@的用法及说明

    那我就来详细讲解一下“Vue中引入路径@的用法及说明”。 在Vue中,我们经常使用import命令引入相关的模块文件。当我们引入一些比较深层次的文件和组件时,可能会出现引入路径很长的情况,这时候就需要使用@别名。 @别名是Vue官方提供的一个路径别名,它默认指向src目录,可以方便我们引入项目中的各个文件和组件。 下面来讲解一下如何使用: 首先,在新建Vue…

    Vue 2023年5月27日
    00
  • 谈谈对Vue Router的理解

    当我们构建单页应用程序(SPA)时,我们通常需要跟不同URL之间进行交互。这通常是通过前端路由来实现的,可以为不同的URL路径定义不同的视图层,使用户可以无感知地在不同的视图层之间进行切换。 Vue Router是一个官方的Vue.js路由管理器,它通过将组件映射到不同的路由来负责为应用程序提供前端路由,并且非常适合用于构建单页应用程序。接下来让我们来讨论一…

    Vue 2023年5月28日
    00
  • 使用canvas仿Echarts实现金字塔图的实例代码

    使用canvas模拟 Echarts 实现各种图表类型,并非易事,尤其是对于初学者。但是,在较少甚至没有 Echarts 库的情况下,这种方法能够使你实现各种基本图形类型,受控制的小部件,重新构建以及基于自定义的视觉样式。 实现金字塔图的攻略 以下为使用 canvas 绘制金字塔图的实现步骤: 步骤 1 – 创建 HTML 元素 创建 HTML5 页面,并添…

    Vue 2023年5月28日
    00
  • vue2组件实现懒加载浅析

    下面是“vue2组件实现懒加载浅析”的详细攻略。 什么是懒加载 懒加载(Lazy Loading)是指在页面滚动到某个区域时才加载该区域的内容。它可以提高页面的加载速度,使用户能够更快地浏览网页,提升用户的使用体验。 vue组件懒加载的实现 Vue.js为我们提供了异步组件(Async Components)的特性,通过这个特性我们可以很方便地实现组件懒加载…

    Vue 2023年5月27日
    00
  • vue实现把接口单独存放在一个文件方式

    在Vue项目中,我们可以将接口单独存放在一个文件中,以便于统一管理和维护,提高开发效率。以下是详细攻略: 1. 创建接口配置文件 在项目中创建一个api目录,用于存放所有接口配置文件。在api目录下新建一个文件,如 index.js。示例代码: import axios from ‘axios’ const service = axios.create({ …

    Vue 2023年5月28日
    00
  • 解决vue单页面应用打包后相对路径、绝对路径相关问题

    解决Vue单页面应用打包后相对路径、绝对路径相关问题是一个常见的问题,这里提供一个完整攻略,以帮助开发者快速解决问题。 问题描述 在开发Vue单页面应用时,需要引入各种资源文件,如CSS样式文件、JS脚本文件、图片资源文件等等。这些文件在开发时,都是通过相对路径或绝对路径引入的。但是,在打包完成后,这些资源文件会被压缩和合并,导致相对路径或绝对路径失效,进而…

    Vue 2023年5月28日
    00
  • vue3使用reactive包裹数组正确赋值问题

    当我们在Vue3中使用reactive包装一个对象时,如果该对象中存在数组,我们需要特别注意对数组进行正确的赋值。在Vue3中对数组的正确赋值方式相对于Vue2中有了一定的变化。 下面是一个使用Vue3中的reactive包装的对象的示例: import { reactive } from ‘vue’ const state = reactive({ nam…

    Vue 2023年5月28日
    00
合作推广
合作推广
分享本页
返回顶部