пряжа: всегда используйте `yarn add --link-duplicates`

yarn help add говорит:

--link-duplicates       create hardlinks to the repeated modules in node_modules

Я предполагаю, что речь идет о жестком связывании файлов, поскольку файлы и модули находятся во взаимно однозначном соответствии, а Linux не поддерживает жесткие ссылки на некорневые каталоги. Однако я могу ошибаться, поскольку каталог node_modules действительно должен называться node_packages.

  1. Есть ли причина, по которой я не хотел бы всегда использовать эту опцию для экономии места на диске?

  2. Могу ли я включить --link-duplicates по умолчанию, чтобы мне не приходилось вводить его каждый раз?


person Tom Hale    schedule 08.10.2017    source источник


Ответы (2)


  1. У пакетов Node могут быть проблемы с символическими ссылками, эта проблема показывает, что она непредсказуема. Если вы проверили, что ваше приложение и зависимости работают с --link-duplicates, вы можете включить эту опцию, но она может внезапно выйти из строя при внесении изменений.

  2. yarn config set link-duplicates true [--global] или создайте файл .yarnrc, содержащий link-duplicates true

person Blaise    schedule 29.01.2019
comment
link-duplicates не выполняет никаких символических ссылок даже в версии, упомянутой в вопросе. Проблема коллизии жестких ссылок также была исправлена. - person Mingye Wang; 16.06.2020

  1. Поскольку символические ссылки не используются, в основном это не проблема. Но пакеты, которые изменяют свои собственные node-modules, существуют, и это может изменить все другие копии (в зависимости от выполняется ли действие на месте). Одним из примеров является само npm с вещью audit, хотя ни один здравомыслящий человек не стал бы причинно смешивать yarn с npm.

  2. Правильное название флага — --install.link-duplicates. Итак, команда yarn config set [--global] -- --install.link-duplicates true. Обратите внимание на -- в команде, которая указывает yarn не интерпретировать install как вариант.

  3. Если вы хотите только сэкономить место на диске, правильный способ — ничего не делать, если вы используете современную файловую систему (BTRFS или XFS в Linux). Yarn уже использует fs.copyFile с COPYFILE_FICLONE и будет использовать их, если они доступны. Если вы используете APFS, NTFS или ReFS, вам все равно придется подождать.

person Mingye Wang    schedule 16.06.2020