NPM пытается получить зависимость, которая никогда не запрашивается - PullRequest
0 голосов
/ 20 января 2019

Я набрал npm install и получил следующую ошибку:

npm ERR! code ETARGET
npm ERR! notarget No matching version found for duplexer2@^0.2.0
npm ERR! notarget In most cases you or one of your dependencies are requesting
npm ERR! notarget a package version that doesn't exist.
npm ERR! notarget
npm ERR! notarget It was specified as a dependency of 'multipipe'
npm ERR! notarget

Я просматриваю журналы и вижу, что multipipe - это зависимость emotion-server, которая является зависимостью верхнего уровня в моем проекте.:

50 silly saveTree ├─┬ emotion-server@9.2.12
50 silly saveTree │ └─┬ create-emotion-server@9.2.12
...
50 silly saveTree │   │     └── object-keys@0.4.0
50 silly saveTree │   ├── multipipe@1.0.2

Достаточно справедливо.Начал задаваться вопросом, почему multipipe указывает зависимость, которая не существует, но, как выясняется, multipipe@1.0.2 никогда не указывает duplexer2@^0.2.0.Вот package.json из multipipe@1.0.2:

{
  "name": "multipipe",
  "version": "1.0.2",
  "description": "pipe streams with centralized error handling",
  "license": "MIT",
  "repository": "juliangruber/multipipe",
  "dependencies": {
    "duplexer2": "^0.1.2",
    "object-assign": "^4.1.0"
  },
  "devDependencies": {
    "mocha": "^3.0.0",
    "through2": "^2.0.0"
  },
  "scripts": {
    "test": "make test"
  }
}

Как видите, он запрашивает duplexer2 до 0.1.2 (я полагаю, что это правильная интерпретация ^), которая действительно существует.

Забавная вещь, duplexer@0.2.0 (не duplexer2@0.2.0) - это зависимость response-dev-utils:

50 silly saveTree │ ├─┬ react-dev-utils@4.2.3
50 silly saveTree │ │ ├── detect-port-alt@1.1.3
...
50 silly saveTree │ │ ├─┬ gzip-size@3.0.0
50 silly saveTree │ │ │ └── duplexer@0.2.0

Так что, возможно, npmнемного запутался, но я не могу доказать это ... Я просто хочу, чтобы npm выбрал правильные зависимости.(npm v6.4.1 на узле v 11.5.0)

Обновление Я удалил emotion-server из package.json, сделал npm install --cache /tmp/empty-cache и получил похожую проблему:

npm ERR! code ETARGET
npm ERR! notarget No matching version found for websocket-extensions@>=0.2.0
npm ERR! notarget In most cases you or one of your dependencies are requesting
npm ERR! notarget a package version that doesn't exist.
npm ERR! notarget
npm ERR! notarget It was specified as a dependency of 'websocket-driver'

Журналы показывают websocket-driver@0.7.0:

59 silly saveTree │ │   ├─┬ faye-websocket@0.11.1
59 silly saveTree │ │   │ └─┬ websocket-driver@0.7.0

Хорошо, но package.json для websocket-driver@0.7.0 говорит '> = 0.1.1'для расширений websocket никогда не говорилось: «расширения websocket @> = 0.2.0»

@> = - это то, чего я никогда раньше не видел и не имеет смысла.Что дает?

1 Ответ

0 голосов
/ 20 января 2019

Это не правильное понимание ^. Правило ^0.1.2 означает, что основная версия должна быть 0, а версия minor.patch должна быть как минимум 1.2, но все, что после этого тоже подойдет. Это эффективно >= 0.1.2 с ограничением, что основная версия имеет , равную 0.

Однако, согласно правилам semver :

  1. Основная нулевая версия (0.y.z) предназначена для начальной разработки. Все может измениться в любое время. Публичный API не должен считаться стабильным.

Если вы хотите увидеть полное дерево зависимостей для пакета, взгляните на https://www.npmjs.com/package/npm-remote-ls, чтобы увидеть, в чем на самом деле виноват. При запуске этого для multipipe нигде не упоминается duplexer@0.2.0, поэтому, если вы считаете, что это ошибка в npm, в дополнение к публикации вашего вопроса здесь, подайте проблему на трекер проблем npm по адресу https://github.com/npm/npm/issues

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...