#typescript
#typescript
Вопрос:
У меня следующая проблема. У меня есть два каталога приложений app1 и app2. Я хотел бы повторно использовать часть кода из app1 в app2. Для достижения этой цели я ввожу псевдоним типа в tsconfig.json: "~/*":["../../app1/src/*"]
это работает нормально при импорте файлов, которые не имеют никакого импорта. Но если есть импорт, я получаю такие ошибки: не удается найти модуль ‘react’ или соответствующие ему объявления типов. Если я установлю node_modules для app1, он тоже будет работать нормально, но я бы хотел, чтобы Typescript использовал папку node_modules проекта app2 для файлов, импортированных из app1. Возможно ли это достичь?
package.json для app2:
{
"name": "app2",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"build": "webpack",
"test": "echo "Error: no test specified" amp;amp; exit 1"
},
"author": "",
"license": "ISC",
"dependencies": {
"@types/react": "^16.9.53",
"@types/react-dom": "^16.9.8",
"react": "^17.0.1",
"react-dom": "^17.0.1",
"ts-loader": "^8.0.7",
"typescript": "^4.0.5",
"webpack": "^5.2.0"
},
"devDependencies": {
"webpack-cli": "^4.1.0"
}
}
tsconfig.json для app2:
{
"compilerOptions": {
"baseUrl": "./src",
"jsx": "react",
"paths": {
"~/*": ["../../app1/src/*"]
}
}
}
Ответ №1:
Вы можете извлечь общий код в «автономную» библиотеку, от которой будут зависеть оба приложения.
Эта библиотека может иметь свои собственные зависимости и одноранговые зависимости ( react
является хорошим кандидатом на одноранговую зависимость).
В противном случае вам необходимо добавить зависимость, требуемую импортируемым кодом, в каждое импортирующее его приложение. Это потому, что вы импортируете его как «автономный» исходный файл, полностью независимый от app1.
Комментарии:
1. Да, это было бы идеальным решением, но, к сожалению, я не могу позволить себе сделать это в данный момент, поскольку это приведет к серьезному рефакторингу довольно большого проекта.
2. Я не следую вашему последнему абзацу вашего ответа. Именно это я и пытаюсь сделать, импортировать исходный файл из app1, но node_modules из app2. Очевидно, что я установил все зависимости в app2, но Typescript просматривает только node_modules проекта app1.
3. Вы установили все зависимости, необходимые для файла в app2? Вам также необходимо установить зависимости разработчика (typings). Здесь вам понадобится
@types/react
и@types/react-dom
.4. Да, я это сделал, все зависимости установлены в app2. Если я установлю также в app1, тогда это сработает, но из-за настройки я хотел бы иметь node_modules только в папке app2.
5. не могли бы вы поделиться
package.json
для app1 и app2?