Пряжа — неотъемлемый инструмент в работе, но на работе многие в основном используют толькоyarn install
, и будет удалено вручнуюnode-modules
или удалитьyarn.lock
Нестандартные операции, такие как файлы. Эта статья начнется с некоторых базовых знаний и постепенно сообщит вамYarn
Существует более глубокое понимание, чтобы обеспечить спецификацию использования пряжи и избежать некоторых скрытых ошибок.
В этой статье в основном представлены следующие знания:
- что такое реестр
- Значение и написание зависимой версии
- Типы зависимостей и различия (
devDependences
,devDependences
,peerDependences
,optionalDependencies
,bundledDependencies
)- Введение в кэширование
yarn.lock
Функция файла и введениеyarn install
Процесс установки зависимостей- Модуль выравнивания деревьев зависимостей
- общий
yarn
Введение в команду
что такое реестр
registry
Да Репозиторий модулей предоставляет службу запросов, которую мы часто называем источником. В качестве примера возьмем официальный зеркальный источник пряжи, его URL-адрес службы запросовhttps://registry.yarnpkg.com
.
Следуйте этому URL-адресу с именем модуля, и вы получите объект JSON с информацией обо всех версиях модуля. Например, посетитеhttps://registry.npmjs.org/vue
, вы увидите информацию обо всех версиях модуля vue.
После имени модуля URL-адреса реестра вы также можете указать номер версии или метку, чтобы запросить информацию о конкретной версии.https://registry.yarnpkg.com/vue/2.6.10
В объекте JSON, возвращенном выше, есть свойство dist.tarball, которое является URL-адресом сжатого пакета этой версии. Свойство dist.shasum эквивалентно хеш-значению, которое используется в блокировке и кэше, о чем будет сказано ниже.
dist: {
"shasum": "a72b1a42a4d82a721ea438d1b6bf55e66195c637",
"tarball":"https://registry.npmjs.org/vue/-/vue-2.6.10.tgz"
},
мы выполняемyarn install
когдаregistry
Запрос, чтобы получить указанный выше адрес сжатого пакета для загрузки.
На работе у нас могут быть сценарии, в которых нам нужно изменить зеркальный источник, например, изменить его на источник Taobao или частный источник нашей собственной компании.
Просмотрите и установите источники, что можно сделать с помощью команды yarn config.
Просмотр используемых в настоящее время зеркальных источников
yarn config get registry
Измените источник зеркала (в качестве примера возьмем изменение источника Taobao)
yarn config set registry https://registry.npm.taobao.org/
Версия зависимости
соответствие пакета пряжиsemver
, семантическая версия.
SemVer — это набор соглашений о семантическом контроле версий, определенных в формате
X.Y.Z(主版本号.次版本号.修订号):
X.主版本号:进行不向下兼容的修改时,递增主版本号
Y.次版本号: 做了向下兼容的新增功能或修改
Z.修订号:做了向下兼容的问题修复
yarn
Существует несколько способов представления диапазона версий зависимостей:
- через компаратор
выражать | Описание значения |
---|---|
<2.0.0 | Любая версия ниже 2.0.0 |
<=3.1.4 | Любая версия ниже или равная 3.1.4 |
>0.4.2 | Любая версия выше 0.4.2 |
>=2.7.1 | Любая версия больше или равна 2.7.1 |
=4.6.6 | Любая версия, равная 4.6.6 |
>=2.0.0 <3.1.4 | Пересечение больше или равно 2.0.0 и меньше 3.1.4 |
<2.0.0 || >3.1.4 | Союз Меньше 2.0.0 или больше 3.1.4 |
Если оператор не указан, по умолчанию используется =
- через дефис
выражать | Описание значения |
---|---|
2.0.0 - 3.1.4 | >=2.0.0 <=3.1.4 |
0.4 - 2 | >=0.4.0 <=2.0.0 |
Те части номера версии, которые отсутствуют, заполняются цифрой 0.
- X диапазон
Символы X, x или * можно использовать в качестве подстановочных знаков для частичного или полного заполнения номера версии. Пропущенная часть номера версии по умолчанию соответствует диапазону x.
выражать | Описание значения |
---|---|
* | >=0.0.0 (любая версия) |
2.x | >=2.0.0 |
3.1.x | >= 3.1.0 |
`` (пустая строка) | * или >= 0.0.0 |
2 | 2.х.х или >= 2.0.0 |
3.1 | 3.1.x или >= 3.1.0 |
- ~ диапазон символов
Используйте символы ~ вместе с младшим номером версии, чтобы разрешить修订号
изменять. Используйте символы ~ вместе с основным номером версии, чтобы указать, что это разрешено.次版本
изменение номера.
выражать | Описание значения |
---|---|
~3.1.4 | >=3.1.4 <3.2.0 |
~3.1 | 3.1.x или >= 3.1.0 |
~3 | 3.x или >= 3.0.0 |
- ^ диапазон символов
Символ ^ указывает, что первая ненулевая цифра в номере версии, 3 в 3.1.4 или 4 в 0.4.2, не будет изменена. Отсутствующие части номера версии будут дополнены нулями, и эти позиции могут изменяться при сопоставлении.
выражать | Описание значения |
---|---|
^3.1.4 | >=3.1.4 <4.0.0 |
^0.4.2 | >=0.4.2 <0.5.0 |
^0.0.2 | >=0.0.2 <0.0.3 |
использоватьyarn add [package-name]
Команда устанавливает зависимости, используя по умолчанию диапазон ^.
Обратите внимание, что если компаратор содержит версии с тегом pre-release, он будет сопоставлять только версии с тем же самым major.minor.patch.
Например>=3.1.4-beta.2
, может соответствовать3.1.4-beta.3
, но не совпадет3.1.5-beta.3
Версия.
Тип зависимости
dependences
Зависимости, необходимые для выполнения кода, такие как vue, vue-router.
devDependences
Зависимости разработки — это те зависимости, которые необходимы только в процессе разработки и не нужны во время выполнения, например, babel и webpack.
peerDependences
Сопутствующие зависимости, которые используются, чтобы сообщить хост-среде, какие зависимости требуются, и диапазоны версий зависимостей.
Если в хост-среде нет соответствующей версии зависимости, при установке зависимости будет выдано предупреждение.
такие как пакетыeslint-plugin-import
Есть зависимости:
"peerDependencies": {
"eslint": "2.x - 5.x"
},
Во время установки, если среда хоста не2.x-5.x
версияeslint
, cli выдаст предупреждение. Но он не установит его для нас автоматически, и его все равно нужно установить вручную.
optionalDependencies
Необязательная зависимость, даже если установка завершится неудачно, Yarn будет считать весь процесс установки зависимостей успешным.
Необязательные зависимости предназначены для тех случаев, когда есть запасной вариант, даже если необязательные зависимости не установлены успешно.
bundledDependencies
Зависимости упаковки.При публикации пакетов пакеты в этом массиве будут упакованы и упакованы в окончательный пакет выпуска.Обратите внимание, чтоbundledDependencies
Пакеты в должны быть объявлены в devDependencies или зависимостях.
тайник
yarn
Установленный пакет будет закэширован, так что при повторной установке того же пакета его не нужно скачивать, а нужно копировать прямо из закешированного файла.
по командеyarn cache dir
Просмотр каталога глобального кеша пряжи. мой каталог кеша находится в/Library/Caches/Yarn/v1
Вниз.
Как можно видеть,yarn
Распакованные пакеты разных версий будут храниться в разных каталогах, и каталоги будут начинаться с
npm-[package name]-[version]-[shasum]`
называть. шасум вышеregistry
приобретенныйdist.shasum
.
Мы можем просмотреть кешированные пакеты с помощью команды.
yarn cache list 列出已缓存的每个包
yarn cache list --pattern <pattern> 列出匹配指定模式的已缓存的包
например, выполнитьyarn cache list --pattern vue
yarn.lock
yarn.lock
Конкретная информация о версии каждой зависимости будет точно храниться на сервере, чтобы гарантировать получение одинаковых результатов при установке на разных компьютерах.
Давайте возьмем @babel/code-frame в качестве примера, чтобы увидеть, какая информация записывается в yarn.lock.
- Первая строка
"@babel/code-frame@7.0.0-beta.54"
Имя и номер пакета, определенные в package.json. -
version
поле, которое записывает точную версию. -
resolved
Поле записывает URL-адрес пакета. Среди них хэш-значение, то есть указанное вышеdist.shasum
. -
dependencies
Поле записывает зависимости текущего пакета, то есть текущий пакет находится вpackage.json
изdependencies
Все зависимости в поле.
Yarn
Во время установки только текущий проектyarn.lock
файл (т.е. файл верхнего уровняyarn.lock
файл), будут игнорировать любые зависимости вyarn.lock
документ. на вершинеyarn.lock
содержит всю информацию обо всех версиях пакетов во всем дереве зависимостей, которые необходимо заблокировать.
yarn.lock
файлы создаются во время установкиYarn
Он автоматически генерируется и управляется yarn.Его нельзя изменять вручную, а файл yarn.lock не следует удалять.Он должен быть отправлен в систему контроля версий, чтобы избежать проблем, вызванных несовместимостью версий пакетов, установленных на разных машинах.
Процесс установки пряжи
первое исполнениеyarn install
установка, буду следоватьpackage.json
Семантическое управление версиями в , гдеregistry
Запросите и получите последний пакет зависимостей, соответствующий правилам загрузки, и постройте дерево зависимостей. например, вpackage.json
Версия vue, указанная в^2.0.0
, вы получите2.x.x
Самая высокая версия пакета. затем автоматически генерироватьyarn.lock
файл и создать кеш.
выполнить позжеyarn install
, будем сравниватьpackage.json
диапазон версий средней зависимости иyarn.lock
Проверьте, совпадают ли номера версий.
- номер версии совпадает, будет основываться на
yarn.lock
серединаresolved
поле для просмотра кэша, если кэш есть, копировать напрямую, если кэша нет, следуйте инструкциямresolved
URL-адрес поля для загрузки пакета. - Номера версий не совпадают, согласно
package.json
Диапазон версийregistry
Запросите, загрузите последний пакет, соответствующий правилам версии, и обновите доyarn.lock
середина.
сплющивание модуля
Как упоминалось выше, при установке зависимостей анализируются зависимости для построения дерева зависимостей. Например, зависимости первого уровня моего проекта (то есть зависимости в зависимостях текущего проекта и devDependences, за исключением зависимостей) включают в себя три пакета: A, B и C. Пакеты A и B зависят от пакета D в одном и том же диапазон версий. Тогда дерево зависимостей для этой части выглядит так:
├── A
│ └── D
├── B
│ └── D
├── C
При установке непосредственно в соответствии с таким деревом зависимостей модуль D будет находиться в пакете A и пакете B.node_modules
установлены в обоих, что приведет к избыточности модулей.
Чтобы в дереве зависимостей не было большого количества повторяющихся модулей, при установке yarn выполнит операцию дедупликации, обойдёт все узлы и поместит модули один за другим под корневым узлом, который является текущим узлом проекта.node-modules
середина. Когда такой же модуль будет найден, он будет оценивать указанный модуль текущего модуля.semver
Пересекается ли диапазон версий, если да, то сохраняется только совместимая версия, если нет, то она находится в текущем пакетеnode-modules
Установите ниже.
Таким образом, в случае, упомянутом выше, окончательная установка выглядит следующим образом: пакеты A, B, C, D будут установлены на первом уровне.node-modules
Вниз.
├── A
├── B
├── C
├── D
Если пакет A и пакет B зависят от несовместимых версий, предполагается, что пакет A зависит от версии D@1, а пакет B зависит от версии D@2. Окончательный результат установки выглядит следующим образом:
├── A
├── B
│ └── D@2
├── C
├── D@1
когда кодrequire
илиimport
Когда модульpackage
изnode-modules
Начни искать внутри, если не найдешь, переходи на предыдущий уровень текущего пакетаnode-modules
Ищите здесь, чтобы всегда можно было найти глобальные node_modules.
Таким образом, древовидная структура приведенной выше установки может гарантировать, что каждыйpackage
Требуемая версия пакета может быть получена.
Общие команды пряжи
- пряжа установить установить зависимости
yarn install / yarn 在本地 node_modules 目录安装 package.json 里列出的所有依赖
yarn install --force 重新拉取所有包,即使之前已经安装的(所以以后别在删除node-modules了...)
yarn install --modules-folder <path> 为 node_modules 目录指定另一位置,代替默认的 ./node_modules
yarn install --no-lockfile 不读取或生成 yarn.lock 文件
yarn install --production[=true|false] / --production / --prod 只安装 dependence下的包,不安装 devDependencies 的包
- yarn add
yarn add package-name 会安装 latest 最新版本。
yarn add <package...> 安装包到dependencies中
yarn add <package...> [--dev/-D] 用 --dev 或 -D 安装包到 devDependencies
yarn add <package...> [--peer/-P] 用 --peer 或者 -P 安装包到 peerDependencies
yarn add <package...> [--optional/-O] 用 --optional 或者 -O 安装包到 optionalDependencies
yarn add <package...> [--exact/-E] 用 --exact 或者 -E 会安装包的精确版本。默认是安装包的主要版本里的最新版本。 比如说, yarn add foo@1.2.3 会接受 1.9.1 版,但是 yarn add foo@1.2.3 --exact 只会接受 1.2.3 版。
yarn add <package...> [--tilde/-T] 用 --tilde 或者 -T 来安装包的次要版本里的最新版。 默认是安装包的主要版本里的最新版本。 比如说,yarn add foo@1.2.3 --tilde 会接受 1.2.9,但不接受 1.3.0。
- пряжа config управлять файлами конфигурации
yarn config get <key> 查看配置key的值
yarn config list 查看当前的配置
yarn config delete <key> 从配置中删除配置key
yarn config set <key> <value> [-g|--global] 设置配置项 key 的值为 value
- Другие общие команды
yarn list 查询当前工作文件夹所有的依赖
yarn info <package> [<field>] 查看包信息,可以查看特定
yarn remove <package...> 从依赖里移除名包,同时更新你 package.json 和 yarn.lock 文件。
yarn <script> [<args>] 执行用户自定义的脚本
- режим подробного журнала
При запуске команды yarn добавьте параметры
--verbose
, что полезно при устранении неполадок
yarn <command> --verbose
Может распечатать детали выполнения (созданные каталоги, скопированные файлы или HTTP-запросы и т. д.)
Добро пожаловать в мой публичный аккаунт "Front-end Xiaoyuan", я буду регулярно обновлять на нем оригинальные статьи.