Vuejs 和 Webpack 5 联合打字稿错误

Pet*_*šek 8 javascript typescript webpack vue.js

我对新的 webpack 5 模块联合和打字稿有疑问。我有两个独立的 vuejs 应用程序,用 VueJS 3 编写。我的问题可能出在 webpack 配置和ts-loader,需要appendTsSuffixTo选项(Cannot find module '@/App.vue' or its corresponding type declarations.没有它我会得到)。

注意:此问题仅与使用 vue 3 或组合 api 与 vue 2 相关。Vue 2(不带组合 api)与 typescript 配合良好。

Webpack ts-loader 在这里:

   'babel-loader',
    {
       loader: 'ts-loader',

       options: {
          appendTsSuffixTo: [/\.vue$/],
       },
    }
Run Code Online (Sandbox Code Playgroud)

我的问题从这里开始,当我使用动态联合模块时:

new ModuleFederationPlugin({
       name: 'main-app',
       filename: 'remoteEntry.js',
       remotes: {
           nav: "nav@http://localhost:5000/remoteEntry.js",
       },
       shared: {
           ...deps,
           vue: {
               singleton: true,
               requiredVersion: deps.vue
           }
       }
   })
Run Code Online (Sandbox Code Playgroud)

并将其导入到我的 App.vue 中:

<template>
  <div id="module">
    <h2>Main app</h2>

    <Header />

  </div>
</template>

<script lang="ts">

import {defineComponent} from "vue";

import Header from "nav/Header";

//const Header = () => import("nav/Header"); //The same problem

//const module = "nav/Header";
//const Header = () => import(module); //The same problem, but error is thrown in browser inspector console.

export default defineComponent({
  name: 'App',
  components: {
    Header
  }
})

</script>
Run Code Online (Sandbox Code Playgroud)

Webpack 抛出这个错误:

TS2307: Cannot find module 'nav/Header' or its corresponding type declarations.
Run Code Online (Sandbox Code Playgroud)

这是一些错误还是我有什么地方有问题?对于没有组合 api 的 vue 2.xx,真的一切都很好。

Yas*_*eda 10

您需要在打字稿中声明您将拥有外部模块。

.d.ts在源码根目录下创建一个扩展名为 tsconfig.json 的文件,并在该文件中声明一个模块。

declare module 'nav/Header'
Run Code Online (Sandbox Code Playgroud)

以防万一,请确保声明文件包含在您的 中tsconfig.json,如下所示。关于如何包含声明文件有一个很好的解释/sf/answers/4181028911/

{
  "include": [
    "**/*.d.ts"
  ]
}
Run Code Online (Sandbox Code Playgroud)