首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么Vue.js3‘`npm运行构建’给出了一大堆错误: TS2304“找不到名称‘foo’& TS2532”对象可能是‘未定义’“?

为什么Vue.js3‘`npm运行构建’给出了一大堆错误: TS2304“找不到名称‘foo’& TS2532”对象可能是‘未定义’“?
EN

Stack Overflow用户
提问于 2022-03-05 09:09:41
回答 2查看 902关注 0票数 2

我使用Vue.js3完成了一个TypeScript项目。我在Vue上做的最后一个项目是Vue.js2,没有vue-tsc的设置更简单。

看来,如果我运行默认的npm run build命令(调用vue-tsc --noEmit && vite build ),就会得到53个错误(在各种文件中多个)。

在dev编译过程中,这些错误永远不会出现,并且在VS代码中看不到突出显示的任何问题。我只看到大量错误(可能与我的类型记录设置有关?)在构建尝试之后。

通过从命令中删除vue-tsc --noEmit并只使用:vite build,我能够解决这个问题。但是,想知道我是否遗漏了什么,或者给我的项目带来了什么潜在的问题?

代码片段如下:

Vue app build package.json中的配置

代码语言:javascript
复制
  "scripts": {
    "dev": "vite",
    "build": "vue-tsc --noEmit && vite build",
    "preview": "vite preview --port 5050",
    "test:unit": "vitest --environment jsdom",
    "test:e2e": "start-server-and-test preview http://127.0.0.1:5050/ 'cypress open'",
    "test:e2e:ci": "start-server-and-test preview http://127.0.0.1:5050/ 'cypress run'",
    "typecheck": "vue-tsc --noEmit -p tsconfig.vitest.json --composite false",
    "lint": "eslint . --ext .vue,.js,.jsx,.cjs,.mjs,.ts,.tsx,.cts,.mts --fix --ignore-path .gitignore"
  },

例如,

当我使用vue-tsc构建时,我会看到错误(2显示)

代码语言:javascript
复制
44         v-model="user.password"
                    ~~~~

src/components/Register.vue:44:18 - error TS2304: Cannot find name 'user'.

44         v-model="user.firstName"
                    ~~~~

src/components/Login.vue:48:25 - error TS2532: Object is possibly 'undefined'.
...
...53 more :(

Register.vue组件(上面错误标记的组件示例)

注意:同样,这里对dev编译没有错误。

代码语言:javascript
复制
<script lang="ts">
import RegisterButton from "./buttons/RegisterButton.vue";
import ValidationErrors from "./ValidationErrors.vue";
export default {
  name: "RegisterUser",
  components: {
    RegisterButton,
    ValidationErrors,
  },
  data() {
    return {
      user: {
        firstName: "",
        lastName: "",
        email: "",
        password: "",
      },
      errors: {},
    };
  },
  methods: {
    onValidationError(errors: Record<string, unknown>) {
      let err = {};
      for (const key in errors) {
        const message = errors[key]["message"];
        err[key] = message;
      }
      this.errors = err;
    },
  },
};
</script>

<template>
  <div class="container-sm mt-3">
    <h1 class="mb-4">Register a New User</h1>
    <ValidationErrors :errors="errors" />
    <!-- Registration Form -->
    <div class="mb-3">
      <input
        type="text"
        class="form-control form-control-lg"
        placeholder="First Name"
        v-model="user.firstName"
      />
    </div>
    <div class="mb-3">
      <input
        type="text"
        class="form-control form-control-lg"
        placeholder="Last Name"
        v-model="user.lastName"
      />
    </div>
    <div class="mb-3">
      <input
        type="email"
        class="form-control form-control-lg"
        placeholder="Email"
        v-model="user.email"
      />
    </div>
    <div class="mb-3">
      <input
        type="password"
        class="form-control form-control-lg"
        placeholder="Password"
        v-model="user.password"
      />
    </div>
    <RegisterButton :user="this.user" @validationError="onValidationError" />
  </div>
</template>

tsconfig.json设置

代码语言:javascript
复制
{
  "compilerOptions": {
    "baseUrl": "./",
    "paths": {
      "@": ["src/*"],
      "store/*": ["src/store/*"]
    },
    "module": "es2022",
    "moduleResolution": "Node",
  }
}

有人知道我可能错过了什么吗?我的tsconfig.json中可能有什么不正确的地方吗?

Tl;DR

运行build命令时,vue-tsc --noEmit && vite build会抛出一些在dev编译期间不存在的错误。如果我只通过vite build构建,一切都会正常工作。然而,我对vue-tsc并不熟悉,我想知道我的设置是否不正确,或者我是否遗漏了什么。

EN

回答 2

Stack Overflow用户

发布于 2022-04-06 06:13:46

在您从Package.json的构建行中删除vue-tsc --noEmit之后,它必须工作。

代码语言:javascript
复制
"build": "vue-tsc --noEmit && vite build",

必须是

代码语言:javascript
复制
"build": "vite build",

对于我的情况,我也有一个配置文件,因此:

代码语言:javascript
复制
"build": "vite build --config vite-app.config.ts"
票数 0
EN

Stack Overflow用户

发布于 2022-09-21 07:36:29

我发现了同样的问题,并通过将vue-tsc版本升级到0.40.13 (最新版本)来解决这个问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71360894

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档