Неудовлетворенная зависимость Root package.json в дочернем пакете.json

#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 был более способным в обработке подпакетов!