#node.js #typescript
#node.js #typescript
Вопрос:
Допустим, у меня есть проект Typescript, подобный этому
root/
api/
package.json
web/
package.json
...
package.json
В корне package.json
у меня установлена зависимость typescript (это для того, чтобы убедиться, что она использует ту же версию в web amp; api).
Если я установлю пакет в web / package.json, который имеет peerDepedency
на Typescript (допустим ts-loader
), он будет жаловаться, что Typescript является неудовлетворенной зависимостью.
корневой пакет.json
{
...
"devDependencies": {
"@types/node": "^11.11.7",
...
"typescript": "^3.3.4000"
}
}
web/package.json
{
...
"devDependencies": {
"ts-loader": "^5.3.3",
"webpack": "^4.29.6"
}
}
Как мне обойти это, не добавляя Typescript в web / package.json?
Если это невозможно, как вы гарантируете, что одна и та же версия пакетов используется в нескольких модулях?
Ответ №1:
К сожалению, npm не имеет какого-либо наследования package.json.
Поскольку это всего лишь предупреждение и все должно по-прежнему работать, поскольку node ищет node_modules
в родительских каталогах, я думаю, вы можете сделать одно из этих:
- Просто игнорируйте предупреждение
- Переместить
ts-loader
в родительский каталог - Объявите и установите точную версию typescript в каждом подкаталоге (без каких-либо модификаторов) и обновляйте их вручную при необходимости
- Переключитесь на yarn amp; use workspaces (я думаю, вам все равно придется указывать typescript в зависимостях каждого пакета, но, по крайней мере, они будут установлены только один раз.)
- Используйте lerna, менеджер js monorepo, который может управлять перекрестными зависимостями
Комментарии:
1. Спасибо! Я действительно хотел избежать использования lerna / yarn, но, похоже, это единственное правильное решение.
2. да, я хотел бы, чтобы npm был более способным в обработке подпакетов!