Как явно указать каталог node_modules для Typescript

#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?