Як автоматично встановлювати залежності від одночасних одночасно?


274

Наприклад, коли я встановлюю Angular2:

npm install --save angular2
temp@1.0.0 /Users/doug/Projects/dougludlow/temp
├── angular2@2.0.0-beta.3 
├── UNMET PEER DEPENDENCY es6-promise@^3.0.2
├── UNMET PEER DEPENDENCY es6-shim@^0.33.3
├── UNMET PEER DEPENDENCY reflect-metadata@0.1.2
├── UNMET PEER DEPENDENCY rxjs@5.0.0-beta.0
└── UNMET PEER DEPENDENCY zone.js@0.5.11

npm WARN angular2@2.0.0-beta.3 requires a peer of es6-promise@^3.0.2 but none was installed.
npm WARN angular2@2.0.0-beta.3 requires a peer of es6-shim@^0.33.3 but none was installed.
npm WARN angular2@2.0.0-beta.3 requires a peer of reflect-metadata@0.1.2 but none was installed.
npm WARN angular2@2.0.0-beta.3 requires a peer of rxjs@5.0.0-beta.0 but none was installed.
npm WARN angular2@2.0.0-beta.3 requires a peer of zone.js@0.5.11 but none was installed.

Чи є магічний прапор, який я можу передати npm, що також встановить залежності від однолітків? Мені не вдалося знайти її ... Досить нудно вручну копіювати та вставляти залежності від однолітків та переконайтесь, що я маю правильні версії.

Іншими словами, я б краще не робив цього:

npm install --save angular2@2.0.0-beta.3 es6-promise@^3.0.2 es6-shim@^0.33.3 reflect-metadata@0.1.2 rxjs@5.0.0-beta.0 zone.js@0.5.11

Який кращий спосіб?


Ви вже вирішили цю проблему? У мене ж проблема встановлення angular2. Навіть після встановлення es6-promis вручну з прапорцем -g та повторної спроби npm install -g angular2, я отримую таку саму помилку / попередження про 5 невідповідних однорангових залежностей es6-обіцянку, es6-shim, метадані, що відображають, rxjs та zone.js
nttakr

4
@nttakr - так, встановлення точних версій, які вона хоче, оскільки залежності від однолітків позбавляється від попередження. Ви не хочете встановлювати їх у всьому світі (із прапорцем -g). Ви хочете встановити їх локально (прапор -S), але, як я вже сказав, вони повинні бути точними версіями (тобто: angular2@2.0.0-beta.3вимагає es6-promise@^3.0.2). Однак я хочу знати, чи є команда / прапор, яка автоматично встановлює залежності від рівних.
Дуглас Людлоу

@DouglasLudlow яку версію NPM ви використовуєте?
peteb

@peteb: npm -v=>3.5.3
Douglas Ludlow

У мене є те саме питання, і я не знайшов вирішення проблеми ....
youngwind

Відповіді:


178

Автоматичну установку рівних залежностей явно було усунено за допомогою npm 3, оскільки це викликає більше проблем, ніж намагалося вирішити. Про це ви можете прочитати тут, наприклад:

Тому ні, з наведених причин ви не можете встановити їх автоматично з npm 3 вгору.


4
Так, я бачив це: github.com/npm/npm/isissue/6565 ... Я просто сподівався, що ви все ще можете додатково встановити їх із прапором чи чимось іншим . Здогадайтесь, мені доведеться відкрити питання чи щось таке.
Дуглас Людлоу

157
Як ви вирішите цю проблему? Я не є експертом з npm, тому, коли я читав "x вимагає однолітків y, але жодного не знайдено", я запитую себе: "який одноліток" і "як я можу просто змусити все знову працювати?" Чи є процес? Чи занурюєтесь у код x і y, поки не дізнаєтесь, чого не вистачає? Як тільки ви дізнаєтесь, чого не вистачає, що робити далі? Дякую!
Ден Кенкро

81
Ах, це англійська проблема: "x вимагає рівний y, але жоден не був встановлений" повинен бути "x вимагає однорангового, y, але y не встановлено". Я зрозумів це як "x вимагає одного з y однолітків, але цей одноранговий не встановлений, і ми не кажемо вам, хто з ровесників y вам потрібен".
Ден Кенкро

1
Крім того, якщо я вручну встановити перелічені залежності від однолітків, я отримую їх як extraneousпакети
plsnoban

3
Є "сторонні", тому що вам потрібно додати їх до залежностей від пакета.
Дінобоф

37

Я вирішив це, переписавши package.json з точними значеннями попереджень про:

npm WARN angular2@2.0.0-beta.3 requires a peer of es6-shim@^0.33.3 but none was installed.

package.json: "es6-shim": "^ 0.33.3",

npm WARN angular2@2.0.0-beta.3 requires a peer of reflect-metadata@0.1.2

package.json: "Reflect-metadata": "0.1.2",

Delete node_modules directory

npm install

15
Можливо npm cache clean, npm installможе бути краще, ніж протирати node_modules? Я завжди утримуюсь від видалення node_modules, мені подобається дізнатися, що це за проблема, а не здувати каталог.
Бруно

Я не думаю, що це дуже безпечна ідея для людей, щоб вони просто почали працювати. Вони мають більші зміни, що погіршують їх конфлікти: наявність коду, який не відповідає його бібліотеці.
zoomlar

Отримав наступне повідомлення про помилки під час спроби запустити кеш-пам'ять npm clean: npm ERR! Станом на npm @ 5, кеш-пам'ять npm самовиліковується від корупційних проблем і дані, витягнуті з кеша, гарантовано є дійсними. Якщо ви хочете переконатися, що все відповідає, замість цього використовуйте 'npm cache verify'. З іншого боку, якщо ви налагоджуєте проблему з інсталятором, ви можете використовувати npm install --cache /tmp/empty-cacheтимчасовий кеш, а не знімати фактичний. npm ERR! npm ERR! Якщо ви впевнені, що хочете видалити весь кеш, повторіть цю команду з --force.
Тарун

22

Чит-код корисний у цьому сценарії та деяких інших ...

├── UNMET PEER DEPENDENCY @ angular / common @ 4.0.2

├── UNMET PEER DEPENDENCY @ angular / компілятор @ 4.0.2

├── UNMET PEER DEPENDENCY @ angular / compiler-cli @ 4.0.2

├── UNMET PEER DEPENDENCY @ angular / core @ 4.0.2

├── UNMET PEER DEPENDENCY @ angular / form @ 4.0.2

├── UNMET PEER DEPENDENCY @ angular / http @ 4.0.2

├── UNMET PEER DEPENDENCY @ angular / platform-browser @ 4.0.2

├── UNMET PEER DEPENDENCY @ angular / platform-browser-динамичний @ 4.0.2>

  1. скопіюйте та вставте свою помилку в редактор коду.
  2. Виділіть непотрібну частину за допомогою курсору. У цьому випадку "├── UNMET PEER DEPENDENCY"
  3. Натисніть команду + d купу разів.
  4. Натисніть кнопку " Видалити" двічі . (Натисніть пробіл, якщо ви випадково виділили "├── UNMET PEER DEPENDENCY".)
  5. Натисніть один раз. Додати "npm встановити"
  6. Натисніть один раз. Додати '- зберегти
  7. Скопіюйте свої речі назад у кліп та запустіть

npm встановити @ angular / common @ 4.0.2 @ angular / compiler @ 4.0.2 @ angular / compiler-cli @ 4.0.2 @ angular / core @ 4.0.2 @ angular / форми @ 4.0.2 @ angular / http @ 4.0 .2 @ angular / платформа-браузер @ 4.0.2 @ angular / платформа-браузер-динамічна @ 4.0.2 - зберегти


8
Опція --save, очевидно, більше не потрібна з npm 5.0.0: stackoverflow.com/a/19578808/12484
Джон Шнайдер,

12

Проект npm-install-peers виявить однолітків та встановить їх.

Станом на v1.0.1це не підтримує написання назад доpackage.json , що по суті вирішило б нашу потребу тут.

Будь ласка, додайте свою підтримку, щоб видати її під час польоту: https://github.com/spatie/npm-install-peers/isissue/4


36
Під час бігу, це дало мені це повідомлення. This package doesn't seem to have any peerDependencies
Thabung

2
У мене таке ж повідомлення.
Thibault Boursier

7
Як я розумію, npm-install-peersвстановлю peerDependenciesзареєстрований в package.json. Він не встановлюватиме peerDependenciesтакі залежності, як angular2.
drizzd

Так, до другого коментаря @drizzd: npm-install-peersпризначений лише для встановлення "peerDependencies"зазначеного в пакеті вашого пакету.json вашого проекту. Ви намагаєтесь встановити "peerDependencies"перелічені у кожному з вас node_modules/<package>/package.jsonфайли, а не ваші прямі залежності від однолітків.
Буде Фарлі

5

У мене виникли ці помилки, коли я розробляв пакет npm, який мав peerDependencies. Я повинен був переконатися, що будь- peerDependenciesякі також були зазначені як devDependencies. Проект не використовував би автоматично встановлені пакети.


Це акуратне рішення, оскільки просто додавання до «залежностей» дещо незграбне!
Ашот

0

Встановіть нитку, а потім запустіть

пряжа глобальна додати встановити-peerdeps


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.