当前位置: 首页 > article >正文

vite+vue3+ts编译vue组件后,编译产物中d.ts文件为空

一、前言

        使用vue3+vite+ts实现一个UI组件库,为了生成类型文件便于其他项目引用该组件库。根据推荐使用了vite-plugin-dts插件进行ts文件的生成

二、版本

组件版本
vue

^3.5.12

vite

^5.4.10

vite-plugin-dts

^4.3.0

typescript

~5.6.2

 三、问题描述

        使用vite+vite-plugin-dts编译的组件库文件中d.ts文件只有一个并且是空的,导致在其他vue项目中无法导入使用

如图:

四、当前配置

1、vitest.config.ts

import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import dts from 'vite-plugin-dts'
// https://vite.dev/config/
export default defineConfig({
  resolve: {},
  build: {
    lib: {
      entry: 'src/index.ts',
      name: 'c-ui', //对外暴露的组件名称
      formats: ['cjs', 'es', 'umd'],//cjs (CommonJS): 通常用于 Node.js 环境,使用 require 语句来导入模块。es (ES Module): 这是现代 JavaScript 的模块标准,使用 import 语句来导入模块。
      fileName: (format)=> `c-ui-${format}.js` //umd(require导入方式) es(import导入方式)
    },
    rollupOptions: {
      external: ['vue'],
      output: {
        //针对于umd模式下为外部化依赖提供一个全局的变量
        globals: {
            vue: 'Vue' //对应exter里的vue, 对于UMD模式导入后,可以使用Vue.xxx
        },
      }
    }
  },
  plugins: [
    vue({
      // 包括哪些文件
      include: [/\.vue$/]
    }),
    dts({ 
      insertTypesEntry: true,
      copyDtsFiles: true,
      // 指定需要为哪些文件生成类型定义
      include: ['src/**/*.d.ts', 'src/**/*.vue', 'src/**/*.ts'] }),
      
  ]
})

2、tsconfig.json

{
  "files": [],
  "references": [
    { "path": "./tsconfig.app.json" },
    { "path": "./tsconfig.node.json" }
  ]
}

注:由于我们是运行在浏览器中的UI组件,所以只需要关心tsconfig.app.json文件。 

3、tsconfig.app.json

{
  "compilerOptions": {
    "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo",
    "target": "ES2020",
    "useDefineForClassFields": true,
    "module": "ESNext",
    "lib": ["ES2020", "DOM", "DOM.Iterable"],
    "skipLibCheck": true,

    /* Bundler mode */
    "moduleResolution": "Bundler",
    "allowImportingTsExtensions": true,
    "isolatedModules": true,
    "moduleDetection": "force",
    "noEmit": true,
    "jsx": "preserve",

    /* Linting */
    "strict": true,
    "noUnusedLocals": true,
    "noUnusedParameters": true,
    "noFallthroughCasesInSwitch": true,
    "noUncheckedSideEffectImports": true
  },
  "include": ["src/**/*.ts", "src/**/*.tsx", "src/**/*.vue"]
}

五、问题原因

原因:vite-plugin-dts组件默认取的是tsconfig.json配置,但是vite创建的项目中tsconfig.json被拆分成2个文件,所以tsconfig.json中的include配置项未生效。如下图:

六、解决方案

vite-plugin-dts组件支持配置tsconfig文件的路径,如下:

dts({ 
// 重要 重要 重要  配置实际的tsconfig配置文件路径
      tsconfigPath: 'tsconfig.app.json',
      insertTypesEntry: true,
      copyDtsFiles: true,
      // 指定需要为哪些文件生成类型定义
      include: ['src/**/*.d.ts', 'src/**/*.vue', 'src/**/*.ts'] 
    }),


http://www.kler.cn/a/402028.html

相关文章:

  • 【Linux】apt 关闭 ssl 认证
  • 数据结构(单向链表——c语言实现)
  • 鸿蒙实战:页面跳转传参
  • MySQL系列之数据授权(privilege)
  • 2021 年 9 月青少年软编等考 C 语言三级真题解析
  • Android集成FCM(Firebace Cloud Messaging )
  • 深入理解 Java 8 Stream 之 collect()
  • Spring Security 认证
  • 蓝桥杯第22场小白入门赛
  • 使用docker安装rabbitmq
  • Python去除图像白色背景
  • 大数据新视界 -- Impala 性能突破:复杂数据类型处理的优化路径(上)(25 / 30)
  • 详细描述一下Elasticsearch索引文档的过程?
  • 基于Java Springboot出租车管理网站
  • 【时间之外】IT人求职和创业应知【35】-RTE三进宫
  • 后端web开发:处理前端操作
  • 微分方程(Blanchard Differential Equations 4th)中文版Exercise 5.3
  • 深入理解Rust的所有权和借用
  • 机器学习中的概率超能力:如何用朴素贝叶斯算法结合标注数据做出精准预测
  • 【Unity基础】认识Unity中的包
  • 自动化测试工具Ranorex Studio(三十七)-创建RANOREX快照文件
  • D2076——一款双通道音频功率放大器【青牛科技】
  • 基于51单片机的电子钟+秒表LCD1602仿真设计
  • 个人理财系统(源码+数据库+报告)
  • Linux常用命令学习
  • DataOps for LLM 的数据工程技术架构实践