You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React库用vite-plugin-dts构建时遇Unexpected token '??='错误求助

解决方案:Unexpected token '??=' 错误修复 + 声明文件生成

错误根源

??= 是ES2020新增的逻辑空赋值运算符,你的配置中target设为ES6(ES2015),但构建过程中存在未被转译为ES6兼容语法的代码(可能来自依赖、插件内部逻辑或自身代码),导致语法解析失败。

分步修复

1. 修正TypeScript配置(tsconfig.json)

你的typeRoots配置错误,它应该指向类型定义目录而非具体声明文件,同时调整声明生成相关配置:

{
  "compilerOptions": {
    "target": "ES6",
    "useDefineForClassFields": true,
    "lib": ["ES6", "DOM", "ES2021.String", "ES2017.Object"],
    "module": "ESNext",
    "skipLibCheck": true,

    /* Bundler mode */
    "moduleResolution": "bundler",
    "allowImportingTsExtensions": true,
    "resolveJsonModule": true,
    "isolatedModules": true,
    "noEmit": true, // 让Vite/rollup处理编译,TS仅做类型检查
    "jsx": "react-jsx",
    "declaration": true,
    "typeRoots": ["node_modules/@types"], // 修正为正确的类型定义目录
    "declarationDir": "dist/types", // 可选:指定声明文件输出子目录

    /* Linting */
    "strict": true,
    "noUnusedLocals": true,
    "noUnusedParameters": true,
    "noFallthroughCasesInSwitch": true
  },
  "include": ["src", "./index.ts"],
  "exclude": ["build", "node_modules", "dist"]
}

2. 调整Vite构建目标与插件配置(vite.config.ts)

提高构建目标至支持??=的ES版本,同时优化vite-plugin-dts的输出配置:

import { resolve } from 'path';
import { defineConfig } from 'vite';
import react from '@vitejs/plugin-react';
import dts from "vite-plugin-dts";

export default defineConfig({
  build: {
    target: "es2020", // 改为支持??=的ES版本,避免语法转译冲突
    lib: {
      entry: resolve(__dirname, 'src/Index.ts'),
      name: 'vite-react-app',
      fileName: (format) => (format === "umd" ? "index.umd.js" : "index.es.js"),
    },
    rollupOptions: {
      external: ['react', "react-dom"],
      output: {
        globals: {
          react: 'React',
          "react-dom": "ReactDOM"
        },
      },
    }
  },
  plugins: [
    react(),
    dts({
      outputDir: 'dist', // 指定声明文件输出到dist目录
      insertTypesEntry: true, // 自动生成index.d.ts入口文件
      cleanVueFileName: false // 非Vue项目可设为false
    })
  ]
});

3. 额外排查点

  • 如果仍报错,检查项目依赖是否有使用ES2020+语法但未被转译的包,可在Vite配置中添加强制预构建:
    optimizeDeps: {
      include: ['出现问题的依赖包名']
    }
    
  • 更新vite-plugin-dts到最新版本,避免插件自身的语法兼容问题。

验证修复

执行npm run build,检查:

  • 终端是否无语法错误
  • dist目录下是否生成了对应的.d.ts声明文件

内容的提问来源于stack exchange,提问作者Gopi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 14:52:47