当更新我的项目以使用最新的@vue/tsconfig版本( compose 本文时的版本0.5.1)时,命令vue-tsc失败并返回错误

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

该项目是用Vite和Vue3构建的,在此更新之前工作没有任何问题.将"noEmit": false添加到指定的tsconfig可以解决此问题.

此错误来自对我的tsconfig扩展的默认tsconfig @vue/tsconfig/Tsconfig.jsonvue-tsc设置"noEmit": true的 destruct 性更改.

我的问题是:在Tsconfig.node.json(VITE使用的)上增加"noEmit": false有什么缺点吗?我已经读过了,noEmit告诉TypeScrip在编译我的代码时不发出任何输出(如JavaScript文件或类型声明).

下面是我的项目中使用的vue和vite的一些最小版本(位于项目根文件夹中):

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 // this was added
  }
}

推荐答案

我猜你指的是@vue/tsconfig@0.5.1而不是vue-tsc.

"noEmit": trueupstream tsconfig.json个加法可能会 destruct 您的项目,因为您还在package.json脚本中的某个地方运行vue-tsc --noEmit.

如果您查看create-vue初学者工具包中的a recent GitHub commit,您会注意到它们在本地tsconfig.json文件中重复了相同的"noEmit": true加法,但删除了--noEmit标志以进行匹配,进行了零和更改:

// package.json
- "type-check": "vue-tsc --noEmit -p tsconfig.app.json --composite false"
+ "type-check": "vue-tsc --build --force"

// tsconfig.app.json, tsconfig.node.json
+ "noEmit": true,

在您这一端,您应该能够通过将package.json脚本更新为匹配theirs来解决您的问题.


我的问题是:将"noEmit":FALSE添加到 Tsconfig.node.json(由VITE使用).

我远不是一个打字专家,但我的理解是,当使用VTE时,你永远不会想要从TS发出文件,因为VITE正在为你处理编译.(我想象有vite build人在幕后传递必要的旗帜.)

也就是说,如果您禁用此标志,并且在整个项目中没有看到任何多余的文件生成,那么可能没有问题?(无论如何,我仍然会遵循create-vue%的S方法.)

所以是see this SO answer on usage of this flag美元.


另外,值得一提的是,create-vue现在生成的tsconfig.json如下所示:

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

通过更新代码库以匹配此 struct ,您可能会更轻松地跟踪future 的更改.你可以在这里浏览这些文件:https://github.com/vuejs/create-vue/tree/v3.9.1/template/tsconfig/base.

Typescript相关问答推荐

如何在不使用变量的情况下静态判断运算式的类型?

具有映射返回类型的通用设置实用程序

如何从具有给定键列表的对象类型的联合中构造类型

与字符串文字模板的结果类型匹配的打字脚本

不推荐使用Marker类-Google map API警告

在分配给类型的只读变量中维护const的类型

如何将v-for中的迭代器编写为v-if中的字符串?

垫表页脚角v15

为什么在leetcode问题的测试用例中,即使我确实得到了比预期更好的解决方案,这段代码也失败了?

如何缩小函数的返回类型?

有没有办法取消分发元组的联合?

为什么S struct 类型化(即鸭子类型化)需要非严格类型联合?

NPM使用Vite Reaction应用程序运行预览有效,但我无法将其部署到Netlify

如何扩展RxJS?

必需的输入()参数仍然发出&没有初始值设定项&q;错误

打字脚本错误:`不扩展[Type]`,而不是直接使用`[Type]`

完全在类型系统中构建的东西意味着什么?

如何避免TS2322;类型any不可分配给类型never;使用索引访问时

为什么我的 Typescript 函数中缺少 void 隐式返回类型?

如果父级被删除或删除,如何自动删除子级?