1

我有一个相当复杂的设置,其中包含许多分布式 npm 包,它们相互需要。我试图尽可能地分解它。设置如下所示(每个子项目都有自己的 package.json):

Project-root:
- package.json*
- /apps: - app1
         - app2
- /common
- /libs: - lib1
         - lib2

应用程序:每个应用程序都是独立的,并使用所有库和通用库,每个都有自己的 package.json

通用:用于共享组件,但仅在应用程序中(依赖于所有库)

Libs:在其他项目和应用程序/公共、WIP 中使用的私有 npm 包,因此通过 npm-workspaces/git clone 使用/包含。因为它们是由工作区通过 npm install 添加的

我遇到的问题是,typescript/tsc 在“common”-module 的所有类中都抛出错误 ts(2307)。

从“@mynamespace/lib1/foo”导入 { BarInterface };

找不到模块“@mynamespace/lib1/foo”或其相应的类型声明。

一切都按预期工作,开发/构建运行没有错误,但 Visual Studio Code/Intellisense 和/或 tsc 无法共同接受提供的导入语句。因此没有可用的自动完成功能,我们高度依赖它,因为该项目应该很容易让新开发人员进入。

* package.json(根):

{
  "name": "main-project",
  "workspaces": [
    "./apps/*",
    "./libs/*",
    "./common"
  ]    
}

* package.json (lib):

{
  "name": "@mynamespace/lib1",
  "exports": {
    "./foo": "./src/foo/index.ts",
  },   
}

* package.json(通用):

{
  "name": "main-project-common",
  "exports": {
    "./bar": "./src/bar/index.ts",
  },
  "dependencies": { 
    "@mynamespace/lib1": "^1.0.0"
    "@mynamespace/lib2": "^1.0.0"
  }   
}

* package.json (app1):

{
  "name": "app1",
  "exports": {
    "./bar": "./src/bar/index.ts",
  },
  "dependencies": { 
    "@mynamespace/main-project-common": "file:../../common"
  }   
}

所有 tsconfig.json 文件如下所示:

{
  "compilerOptions": {
    "target": "es2018",
    "module": "esnext",
    "lib": ["es2017", "dom", "dom.iterable"],
    "declaration": true,
    "emitDeclarationOnly": true,
    "outDir": "./types",
    "rootDir": "./src",
    "strict": true,
    "noUnusedLocals": true,
    "noUnusedParameters": true,
    "noImplicitReturns": true,
    "noFallthroughCasesInSwitch": true,
    "moduleResolution": "node",
    "allowSyntheticDefaultImports": true,
    "experimentalDecorators": true,
    "forceConsistentCasingInFileNames": true,
    "useDefineForClassFields": false,
    "resolveJsonModule": true,
    "noImplicitAny": false
  },
  "include": ["src/**/*.ts", "global.d.ts"],
  "exclude": []
}

vite.config.js

import { defineConfig } from 'vite';
import path from 'path';

// https://vitejs.dev/config/
export default defineConfig({
  build: {
    target: 'esnext',
    lib: {
      entry: path.resolve(__dirname, 'src/index.ts'),
      formats: ['es'],
    },
    rollupOptions: {
      external: /^lit/,
    },
  },
});

我错过了什么,或者设置太复杂或打字稿不支持某种反模式?

4

1 回答 1

0

我发现了问题。我错过了common -module的模块声明

添加具有以下内容的文件为我解决了这个问题global.d.ts/common

declare module '*';

每个打字稿模块都需要此步骤。

于 2022-01-12T14:49:07.770 回答