我有一個相當復雜的設定,其中包含許多分布式 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/,
},
},
});
我是否遺漏了什么,或者設定太復雜或打字稿不支持某種反模式?
uj5u.com熱心網友回復:
我發現了問題。我錯過了common -module的模塊宣告。
添加具有以下內容的檔案為我解決了這個問題global.d.ts。/common
declare module '*';
每個打字稿模塊都需要此步驟。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/411281.html
標籤:
