vue3+vite配置 unplugin-vue-component 找不到 Vant 组件的问题

这篇具有很好参考价值的文章主要介绍了vue3+vite配置 unplugin-vue-component 找不到 Vant 组件的问题。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

使用 vue3 + vite + Vant 搭建移动端项目,为了避免全量引入 vant 导致打包体积过大,又不想一个一个组件手动导入,所以就选择了 vant 官方推荐的方法,使用 unplugin-vue-components 插件自动引入组件,并按需引入组件的样式。
但是运行过程中遇到了报错:[vite] Internal server error: Failed to resolve import "vant/es" from "xxx"

vue3+vite配置 unplugin-vue-component 找不到 Vant 组件的问题,Vite,vue.js,前端,javascript,vite

项目依赖

  • package.json
{
  "name": "vue3-demo",
  "private": true,
  "version": "1.0.0",
  "type": "module",
  "scripts": {
    "dev": "vite --host",
    "build": "vue-tsc && vite build",
    "preview": "vite preview",
    "git": "tive git -c tive.git.config.cjs",
    "lint": "eslint --ext .js,.jsx,.ts,.tsx --fix --quiet ./src",
    "lint:stylelint": "stylelint --cache --fix \"src/**/*.{less,css,scss}\" --cache --cache-location node_modules/.cache/stylelint/",
    "prepare": "husky install"
  },
  "dependencies": {
    "amfe-flexible": "^2.2.1",
    "axios": "^1.4.0",
    "lib-flexible": "^0.3.2",
    "pinia": "^2.0.35",
    "vant": "^4.3.1",
    "vue": "^3.2.47",
    "vue-router": "4.0.1"
  },
  "devDependencies": {
    "@types/node": "^20.1.0",
    "@typescript-eslint/eslint-plugin": "^5.59.2",
    "@typescript-eslint/parser": "^5.59.2",
    "@vitejs/plugin-vue": "^4.1.0",
    "typescript": "^5.0.2",
    "unplugin-vue-components": "^0.24.1",
    "vite": "^4.3.2",
    "vite-plugin-compression": "^0.5.1",
    "vite-plugin-eslint": "^1.8.1",
    "vite-plugin-style-import": "^2.0.0",
    "vue-eslint-parser": "^9.2.1",
    "vue-tsc": "^1.4.2"
  },
  "lint-staged": {
    "*.{js,jsx,tsx,ts}": [
      "npm run lint",
      "npm run lint:stylelint"
    ]
  }
}

完整报错

  Plugin: vite-plugin-eslint
  File: /Users/tiven/Desktop/dev/yc-chat-mbi/src/components/Footer.vue
2:47:05 PM [vite] Internal server error: Failed to resolve import "vant/es" from "src/components/Footer.vue". Does the file exist?
  Plugin: vite:import-analysis
  File: /Users/tiven/Desktop/dev/yc-chat-mbi/src/components/Footer.vue:1:89
  1  |  /* unplugin-vue-components disabled */import { Field as __unplugin_components_1 } from 'vant/es';import 'vant/es/field/style/index';
     |                                                                                          ^
  2  |  import { Button as __unplugin_components_0 } from 'vant/es';import 'vant/es/button/style/index';
  3  |  import { defineComponent as _defineComponent } from "vue";
  • vite.config.ts 配置如下:
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import eslintPlugin from 'vite-plugin-eslint'
import path from 'node:path'
import viteCompression from 'vite-plugin-compression'
import postCssPxToRem from 'postcss-pxtorem'
import Components from 'unplugin-vue-components/vite'
import { VantResolver } from 'unplugin-vue-components/resolvers'

// https://vitejs.dev/config/
export default defineConfig({
  resolve: {
    // 在导入模块时,如果模块路径不包含文件扩展名,则会尝试添加下面这些扩展名
    extensions: ['.js', '.ts', '.jsx', '.tsx', '.json', '.vue'],
    // 在导入模块时,如果模块路径以 / 开头,则会尝试在下面这些目录中查找该模块
    alias: {
      '@': path.resolve(__dirname, './src'),
      '@img': path.resolve(__dirname, './src/assets/img'),
    },
  },
  build: {
    sourcemap: false,
    minify: 'terser',
    assetsInlineLimit: 4096,
    reportCompressedSize: false,
    rollupOptions: {
      output: {
        // 最小化拆分包
        manualChunks(id) {
          if (id.includes('node_modules')) {
            return id.toString().split('node_modules/')[1].split('/')[0].toString()
          }
        },
        chunkFileNames: 'assets/js/[name].[hash].js', // 用于命名代码拆分时创建的共享块的输出命名,[name]表示文件名,[hash]表示该文件内容hash值
      },
      // external: ['antd'],
    },
    terserOptions: {
      compress: {
        drop_console: true,
        drop_debugger: true,
      },
    },
  },
  plugins: [
    vue(),
    Components({
      resolvers: [VantResolver()],
    }),
    eslintPlugin({
      include: ['src/**/*.ts', 'src/**/*.vue', 'src/*.ts', 'src/*.vue'],
    }),
    viteCompression({
      threshold: 1024 * 4,
    }),
  ],
  css: {
    postcss: {
      plugins: [
        postCssPxToRem({
          rootValue: 37.5, //1rem的大小
          propList: ['*'], //需要转换的属性
          selectorBlackList: ['.norem'], //过滤掉不需要转换的类名
        }),
      ],
    },
  },
})

解决办法

修改 vite.config.ts 下的 resolve.extensions 参数配置,加入 .mjs 拓展名即可解决。

export default defineConfig({
  resolve: {
    // 在导入模块时,如果模块路径不包含文件扩展名,则会尝试添加下面这些扩展名
    extensions: ['.mjs', '.js', '.ts', '.jsx', '.tsx', '.json', '.vue'],
    // 在导入模块时,如果模块路径以 / 开头,则会尝试在下面这些目录中查找该模块
    alias: {
      '@': path.resolve(__dirname, './src'),
      '@img': path.resolve(__dirname, './src/assets/img'),
    },
  },
})

欢迎访问:天问博客文章来源地址https://www.toymoban.com/news/detail-590230.html

到了这里,关于vue3+vite配置 unplugin-vue-component 找不到 Vant 组件的问题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • unplugin-vue-components解决命名冲突

    我们在vue项目中通常会利用unplugin-vue-components插件进行自定义组件的自动引入 注:如果不知道怎么配置unplugin-vue-components插件,欢迎看我整理的这篇: vue3项目配置按需自动引入自定义组件unplugin-vue-components 当出现同名文件时,该怎么解决呢? 非常简单,只需要多一项属性配

    2024年02月20日
    浏览(24)
  • 基于vue3+ts+vite的项目使用‘unplugin-auto-import/vite’插件,自动全局导入api的注意事项

    ​  1.首先安装插件 npm install unplugin-auto-import @vitejs/plugin-vue -D 2.安装完成后在vite.congfig.ts中配置,红色部分就是关于插件的基础自动导入部分,这样就可以将vue和router的相关api全局导入了, import AutoImport from \\\"unplugin-auto-import/vite\\\" export default defineConfig({   plugins: [     vue(),  

    2023年04月12日
    浏览(45)
  • vue3自动引入插件unplugin-auto-import (vite搭建项目,vue-cli搭建项目两种方式)

    插件地址:https://github.com/antfu/unplugin-auto-import 如果安装了eslint,使用的ref、torefs等报错undefind如下图 需在2个地方vue.config.js ,.eslintrc.js文件做配置 代码:

    2024年02月13日
    浏览(32)
  • Vue3+TS+Vite 找不到模块“@/components/xxx/xxx”或其相应的类型声明。

    今天在写vue3项目时碰到一个问题,引入自定义的词云图组件一直报错,提示找不到模块 文件是存在的,引入路径也是对的。于是直接百度解决方案 有一些解决方案是在tsconfig.json里面做一些配置,这里我就不说了,大家可以自行百度,还有一种是在项目根目录建立一个 env.

    2024年02月11日
    浏览(79)
  • 安装配置vue3+vite

    安装 18.0 或更高版本的 Node.js 查看Node版本 显示版本号安装成功   查看cnpm版本 显示版本号安装成功   安装成功后使用 npm list vue来检查vue版本号  现在,已经成功创建了一个 Vue 3 和 Vite 的项目。浏览器会自动打开 目录结构 代码规范和风格 环境变量和配置 API 请求封装 路由

    2024年02月08日
    浏览(28)
  • vue3+vite配置环境变量

    新建 .env(所有环境生效).env.development(开发环境配置) .env.production(生产环境配置) 以 VITE_ 为前缀定义变量 修改vite-env.d.ts 使用 loadEnv 读取环境变量 使用npm run dev 启动命令,读取.env 与 .env.development的内容 修改package.json 使用 npm run test启动命令,读取.env 与 .env.test的内容

    2024年02月11日
    浏览(32)
  • Vue3+vite环境变量配置

    在项目开发中,通常来说,不同的环境会有不同的请求api接口,这就需要修改配置,才能满足对应的环境。所以这里就使用了环境变量。环境变量就是在不同的环境中使用不同的变量值。 在项目根目录(和src同级)中创建三个文件: .env.development  .env.staging .env.production 定义

    2024年02月05日
    浏览(29)
  • Vue3 + Vite 多入口配置

    试了一下多入口跳转的问题: 其实就是多了个build empty就是“是否清空输出目录”,默认也是true。 然后就会出现这样的报错: [vite]: Rollup failed to resolve import \\\"src/main.js\\\" from \\\"index.html\\\". This is most likely unintended because it can break your application at runtime. If you do want to externalize this mod

    2023年04月27日
    浏览(25)
  • vue3+vite配置多入口文件

    1.修改vite.config.ts 文件: 2.在src目录底下建相应的html文件和对应的ts入口文件和vue文件,如下图: npm run dev运行后本地访问: npm run build打包后的结构如图:

    2024年02月13日
    浏览(20)
  • vscode vue3+vite 配置eslint

    vue2+webpack+eslint配置 目前主流项目都在使用 vue3+vite ,因此针对 eslint 的配置做了一下总结。 安装插件,执行以下命令 执行上述命令,package.json 中 会自动添加以下内容 在在根目录创建 .eslintrc.js 文件 (命令方式) .eslintrc.js 文件的内容 在项目根目录下创建一个名为 .prettier

    2024年02月13日
    浏览(30)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包