Коли використовувати пряжу над NPM? Які відмінності?


101

Які відмінності між пряжею та NPM? На момент написання цього питання я міг знайти лише кілька статей в Інтернеті, які показують, що пряжа еквівалентна такій команді NPM .

Чи мають вони однакові функціональні можливості (я знаю, що Пряжа виконує локальне кешування, і схоже, що Вам потрібно завантажити пакет лише один раз), але крім цього, чи є якісь переваги для переходу від NPM до Пряжі?


11
Це непогане питання і не заслуговує на голосування. Тим не менш, це потрібно трохи доопрацювати, щоб зробити справді гарне запитання.
jedd.ahyoung

Швидкий Google виявляє це . Я вважаю, що це, мабуть, занадто широке / не конструктивне для StackOverflow, і в будь-якому випадку це могло б зробити трохи більше досліджень.
Aurora0001

1
@ Aurora0001 коли я шукав, я побачив шпаргалку, але це не відповідь на моє запитання! Я хочу знати різницю між ними, а не різницю між командами. Спершу прочитайте моє запитання
Аша

4
@Asha Вам слід відредагувати своє запитання, щоб мати більше деталей, і показати, що ви вже досліджували. Які відмінності ви хочете знайти? Ви намагаєтесь з’ясувати, як впроваджені бібліотеки? Ви намагаєтесь з’ясувати, як вони різняться у підході до проблеми? Якщо ви ставите своє питання більш точним, воно може бути хорошим, залежно від того, що ви задаєте. (Залежно від того, що ви запитуєте, інформація може бути вже доступна в Google.)
jedd.ahyoung

3
смішні люди кажуть вам загуглити; Я знайшов, що ваше запитання буде загуглити ... люди в stackoverflow люблять надмірно виключати речі, ніби це робить їх важливішими, я думаю.
jairhumberto

Відповіді:


68

ОНОВЛЕННЯ: Березень 2018 (трохи пізно ...)

Починаючи з версії 5, npm

  • генерує `` файл блокування '', package-lock.jsonякий виправляє все ваше дерево залежностей приблизно так само, як це робить механізм блокування пряжі (або будь-якого іншого),
  • Виготовлено інструмент
  • --save зараз мається на увазі для npm i
  • Краще використання мережі та кешу

НПМ 5.7.0 додатково ввів в npm ciкоманду для більш швидкого встановлення залежностей в середовищі безперервної інтеграції лише установкою пакетів знайти в package-lock.json(повідомлення про помилку , якщо package-lock.jsonі package.jsonне синхронізовані).

Особисто я досі користуюся npm.


Оригінал

Мені неприємно цитувати безпосередньо з документів, але вони чудово пояснюють, чому, досить стисло, щоб я не бачив, як далі узагальнювати ідеї.

Багато в чому:

  1. Ви завжди знаєте, що отримуєте одне і те ж на кожній машині розробки

  2. Він паралелізує операції, які npmцього не роблять, і

  3. Це дозволяє більш ефективно використовувати мережу.

  4. Це може ефективніше використовувати й інші системні ресурси (наприклад, ОЗУ) .

Який досвід виробництва у людей? Хто знає, це немовля для широкої публіки.

TL; DR від Yehuda Katz :

З самого початку, файл блокування Yarn гарантує, що багаторазовий запуск пряжі в одному сховищі приводить до одних і тих же пакетів.

По-друге, Пряжа намагається мати хороші показники, з холодним кешем, але особливо з теплим кешем.

Нарешті, Пряжа робить безпеку основною цінністю.

Гарний допис у блозі

" NPM проти пряжі шпаргалка " від Ганта Труборде

Трохи довша версія проекту :

Швидко: Пряжа кешує кожен завантажений пакет, тому більше ніколи не потрібно. Це також паралелізує операції, щоб максимізувати використання ресурсів, тому час встановлення швидший, ніж будь-коли.

Надійний: Використовуючи детальний, але стислий формат файлу блокування та детермінований алгоритм встановлення, Yarn може гарантувати, що установка, яка працювала в одній системі, працюватиме точно так само, як і в будь-якій іншій системі.

Безпека: Пряжа використовує контрольні суми для перевірки цілісності кожного встановленого пакету перед тим, як виконувати його код.

І з README.md :

  • Офлайн-режим: якщо ви вже встановили пакет раніше, ви можете встановити його знову без підключення до Інтернету.
  • Детерміновані: однакові залежності встановлюватимуться однаково точно на кожному комп'ютері незалежно від порядку встановлення.
  • Продуктивність мережі: Пряжа ефективно ставить запити в чергу та уникає водоспадів запитів, щоб максимізувати використання мережі.
  • Кілька реєстрів: Встановіть будь-який пакет з npm або Bower і збережіть робочий процес вашого пакета однаковим.
  • Мережева стійкість: Помилка одного запиту не призведе до помилки встановлення. Запити повторюються при відмові.
  • Плоский режим: вирішіть невідповідні версії залежностей до однієї версії, щоб уникнути створення дублікатів.
  • Більше смайликів. 🐈

Чи можете ви сказати мені, чи пряжа робить дозвіл на залежність, як це робить npm v3 ? Я розумію, що існує --flatваріант, який примушує справжню плоску структуру, де дозволяється встановлювати лише одну версію кожної залежності, але яка поведінка за замовчуванням для цього? Дякую.
Dimitris Karagiannis

2
Більше смайлів: кішка:
Huei Tan

7
Відмінна відповідь. Цікаво, чи намагалися вони зробити внесок у npm перед форкінгом, перейменуванням та зміною синтаксису install -g.
Гарднер Бікфорд,

дуже хороший пост scotch.io/tutorials/…
Vijay Jain

2

нпм :

  1. Менеджер пакетів для JavaScript. npm - це інтерфейс командного рядка для екосистеми npm. Він перевірений боями, напрочуд гнучкий і використовується щодня сотнями тисяч розробників JavaScript.
  2. NPM генерує правильний файл блокування, тоді як файл блокування пряжі може бути пошкоджений в деяких випадках і повинен бути виправлений за допомогою інструментів пряжі

Пряжа :

  1. Новий менеджер пакунків для JavaScript. Пряжа кешує кожен завантажений пакет, тому більше ніколи не потрібно. Це також паралелізує операції, щоб максимізувати використання ресурсів, тому час встановлення швидший, ніж будь-коли.
  2. Пряжа не підтримує вхід за допомогою пароля (тоді як NPM підтримує)

1
що за логіни?
Rich Stone

2

Що таке PNPM?

pnpmвикористовує жорсткі посилання та символьні посилання для збереження однієї версії модуля лише один раз на диску. Наприклад, при використанні npm або Yarn, якщо у вас 100 проектів, що використовують ту саму версію lodash, на диску буде 100 копій lodash. За допомогою pnpm lodash буде збережено в одному місці на диску, а жорстке посилання помістить його в node_modules, де його слід встановити.

В результаті ви економите гігабайт місця на вашому диску і набагато швидше встановлюєте! Якщо ви хочете отримати докладнішу інформацію про унікальну структуру node_modules, яку створює pnpm, і чому вона чудово працює з екосистемою Node.js, прочитайте цю невелику статтю: Чому ми повинні використовувати pnpm?

Як встановити PNPM?

npm install -g pnpm

Як встановити пакет npm за допомогою PNPM?

pnpm install -g typescript // or your desired package

Переваги PNPMнад YarnіNPM

Ось прогрес-бар , що показує час установки прийнято NPM, YARNі PNPM(коротше-бар краще) введіть тут опис зображення

Клацніть на "Повна перевірка"

для отримання детальної інформації відвідайте https://www.npmjs.com/package/pnpm


1

Коли ви встановлюєте пакет за допомогою Yarn (за допомогою yarn add name name), він поміщає пакет на ваш диск . Під час наступної інсталяції цей пакет буде використаний замість надсилання HTTP-запиту для отримання tarball із реєстру.

Пряжа поставляється з зручним засобом перевірки ліцензій , який може стати дійсно потужним у випадку, якщо вам доведеться перевіряти ліцензії всіх модулів, від яких ви залежате.

Якщо ви працюєте над фірмовим програмним забезпеченням, не має значення, яке саме ви використовуєте. З npm ви можете використовувати npm-shrinkwrap.js, тоді як ви можете використовувати yarn.lock з Yarn.

Для отримання додаткової інформації, будь ласка, прочитайте наступний блог

https://blog.risingstack.com/yarn-vs-npm-node-js-package-managers/


1

Намагаючись дати кращий огляд для початківців.

Історично npm (2010) був найпопулярнішим менеджером пакетів для JavaScript. Якщо ви хочете використовувати його для управління залежностями вашого проекту, ви можете ввести таку команду:

npm init

Це створить package.jsonфайл. Він містить усі залежності проекту.

Тоді

npm install

створив би каталог node_modulesі завантажив у нього залежності (які ви додали до package.jsonфайлу).

Він також створить package-lock.jsonфайл. Цей файл використовується для опису дерева залежностей, яке було створено. Це дозволяє розробникам встановлювати абсолютно однакові залежності. Наприклад, ви можете собі уявити, що розробник підвищує залежність до v2, а потім v3, а інший безпосередньо оновлює до v3.

npm встановлює залежності недетермінованим чином, тобто два розробники можуть мати інший node_modulesкаталог, що призводить до різної поведінки . ** npm постраждав від поганої репутації, як, наприклад, у лютому 2018 року: у версії 5.7.0 було виявлено проблему, при якій запуск sudo npm в системах Linux змінить право власності на системні файли, остаточно зламавши операційну систему.

Щоб вирішити ці та інші проблеми, Facebook представила новий менеджер пакетів (2016 г.): Пряжа швидше, надійніше і надійніше менеджера пакетів для JavaScript.

Ви можете додати пряжу до проекту, набравши:

yarn init

Це створить package.jsonфайл. Потім встановіть залежності за допомогою:

yarn install

Буде створено папку node_modules. Пряжа також створить файл із назвою yarn.lock. Цей файл служить тій же меті, що і файл, package-lock.jsonале замість цього побудований за допомогою детермінованого та надійного алгоритму, що призводить до послідовних збірок.

Якщо ви розпочали проект з npm , ви можете легко перейти на пряжу . пряжа споживатиме те саме package.json. Докладніше див. У розділі Перехід із npm .

Однак npm вдосконалювався з кожним новим випуском, і деякі проекти все ще використовують npm над пряжею .


1

Відповідь @msanford охоплює майже все, однак, мені не вистачає частини безпеки (Відомі вразливості OWASP).

Пряжа

Ви можете перевірити їх за допомогою yarn audit, однак ви не можете їх виправити. Це все ще відкрите питання на GitHub ( https://github.com/yarnpkg/yarn/issues/7075 ).

нм

Ви можете використовувати npm audit fix, тому деякі з них ви можете виправити самостійно.

Вони обидва, тобто npm audit& yarn auditмають власні інструменти безперервної інтеграції. Це відповідно https://github.com/IBM/audit-ci (використовується, чудово працює!) Та https://yarnpkg.com/package/audit-ci (не використовувався).

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