Импорт модуля Typescript — нет автозавершения в архитектуре вложенного проекта/npm-workspaces
У меня довольно сложная установка с множеством распределенных пакетов npm, которые требуют друг друга. Я постарался максимально разобрать. Настройка выглядит так (каждый подпроект имеет свой package.json):
Project-root:
- package.json*
- /apps: - app1
- app2
- /common
- /libs: - lib1
- lib2
Приложения: каждое приложение является автономным и использует все библиотеки и общие библиотеки, каждое из которых имеет свой собственный package.json.
Общий: используется для общих компонентов, но только в приложениях (зависит от всех библиотек) .
Библиотеки: Частные npm-пакеты, используемые в других проектах и в приложениях/общих, WIP и, следовательно, используемые/включаемые через клон npm-workspaces/git. Поскольку они добавляются через npminstall by workspaces
У меня проблема в том, что typescript/tsc выдает ошибку ts(2307) во всех классах в «общем» модуле.
импортировать { BarInterface } из '@mynamespace/lib1/foo';
Не удается найти модуль '@mynamespace/lib1/foo' или его соответствующие объявления типов.
Все работает как надо, а dev/build работает без ошибок, но Visual Studio Code/Intellisense и/или tsc не могут принимать предоставленные операторы импорта в общем. Поэтому автодополнение недоступно, на что мы очень полагаемся, поскольку проект должен быть легким для новых разработчиков.
* package.json (корень):
{
"name": "main-project",
"workspaces": [
"./apps/*",
"./libs/*",
"./common"
]
}
* package.json (библиотека):
{
"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"
}
}
* пакет.json (приложение1):
{
"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/,
},
},
});
Я что-то упускаю, или настройка слишком сложная, или какой-то антишаблон, не поддерживаемый машинописи?
1 ответ
Я нашел проблему. Я пропустил объявление модуля common -module .
Добавление файла
global.d.ts
к
/common
со следующим содержанием решил проблему для меня.
declare module '*';
Этот шаг необходим для каждого модуля машинописного текста.