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

升级@vue/tsconfig至0.5.1后vue-tsc报错,添加noEmit:false是否有弊端?

问题背景

把项目升级到最新版@vue/tsconfig(0.5.1版本)后,基于Vite+Vue3构建的项目执行vue-tsc命令时出现如下错误:

Referenced project 'd:/repos/project/tsconfig.node.json' may not disable emit

之前项目运行正常,给tsconfig.node.json添加"noEmit": false就能解决这个问题。错误根源是vue-tsc的破坏性变更:@vue/tsconfig/tsconfig.json默认设置了"noEmit": true,而项目的tsconfig继承了这个配置。

现在疑问是:给Vite专用的tsconfig.node.json添加"noEmit": false有没有弊端?(已知noEmit是用来告诉TypeScript编译时不生成JS文件、类型声明这类输出文件的)

项目根目录的简化配置如下:

tsconfig.json

{
  "extends": "@vue/tsconfig/tsconfig.json",
  "include": ["env.d.ts", "src/**/*", "src/**/*.vue"],
  "compilerOptions": {
    "baseUrl": ".",
    "paths": {
      "@/*": ["./src/*"]
    },
    "noImplicitAny": false,
    "allowJs": true,
    "ignoreDeprecations": "5.0"
  },
  "references": [
    {
      "path": "./tsconfig.node.json"
    }
  ]
}

tsconfig.node.json

{
  "extends": "@vue/tsconfig/tsconfig.json",
  "include": ["vite.config.*", "vitest.config.*", "cypress.config.*", "playwright.config.*"],
  "compilerOptions": {
    "composite": true,
    "types": ["node"],
    "noEmit": false // 新增的配置
  }
}
解答

给tsconfig.node.json设置"noEmit": false没有实际弊端,理由如下:

  • tsconfig.node.json的作用是给Vite/Vitest等工具的配置文件做类型检查,这些配置文件本身是由Vite通过esbuild直接转译运行的,根本不需要TypeScript生成编译输出文件。
  • 虽然开启noEmit: false后,理论上tsc会尝试生成输出,但这些配置文件体积很小,编译耗时可以忽略,而且实际开发中我们不会用到这些生成的文件。更关键的是,vue-tsc的核心作用是做Vue项目的类型检查和组件类型声明生成,它不会为tsconfig.node.json里的文件生成多余输出。
  • 由于你的主tsconfig.json通过references引用了tsconfig.node.json,而TypeScript的复合项目(composite: true)要求被引用的项目必须允许emit(否则无法生成增量编译所需的.tsbuildinfo文件),所以这里设置"noEmit": false是符合复合项目规范的,也是解决当前报错的正确方式。

简单说,这个配置只是为了满足vue-tsc和TypeScript复合项目的要求,不会给项目带来任何负面影响。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 22:19:53