Как установить пакет с локальным путем по Yarn? Не удалось найти пакет

105

В моем package.jsonя указываю локальный пакет my-custom-i18nпо его относительному пути:

package.json

"dependencies": {
 "core-js": "^2.4.1",
 "my-custom-i18n": "./../MyProject.Shared/myproject-i18n",
 "rxjs": "5.0.0-beta.12",
 ...
}

npm installустанавливает пакеты правильно, но у yarnнего проблемы с этим, и он просто не может найти этот пакет:

выход пряжи

$ yarn
yarn install v0.15.1
info No lockfile found.
[1/4] Resolving packages...
error Couldn't find package "myproject-i18n" on the "npm" registry.
info Visit http://yarnpkg.com/en/docs/cli/install for documentation about this command.

Я вижу, что он ищет его в npmреестре, где этого пакета нет.

Вопрос

Есть ли какие-либо изменения в использовании пряжи с локальными пакетами? Под локальными пакетами я подразумеваю пакеты, указанные относительным путем как my-custom-i18n.

Michalczukm
источник

Ответы:

201

Пряжа требует префикса file:для локальных пакетов.

Для относительного пути:

yarn add file:./../your-project

Для абсолютного пути

yarn add file:/dev/your-project

В вашем примере зависимость в package.jsonбудет объявлена ​​следующим образом:

 "my-custom-i18n": "file:./../MyProject.Shared/myproject-i18n",

Это работает как для Yarn, так и для NPM.

Это несовместимо с клиентом NPM, команда Yarn знает и объявила, что поддерживает такое поведение - ссылка на проблему GitHub .

Обновить:

С v0.21.0 выпуска, file:префикс не требуется. См. Запрос на включение с исправлением и журнал изменений .

Петр Левандовски
источник
1
спасибо, работает как шарм. Но если он пока несовместим с клиентом npm - просто оставлю npmкак есть :) PS Моя идея заключалась в том, чтобы использовать yarnтолько локально, без конвертации всей команды и проекта. Так что ... мне придется дождаться поддержки для этого :)
michalczukm
3
убедитесь, что вы очистили кеш. as yarn всегда сначала пробуйте кешированную версию
Бо Чен
5
+1 за обновление! Удаление file:префикса решило проблему, которая у нас была, когда yarn installв Windows добавлялся ./префикс к относительным путям файлов, но yarn installв macOS он удалялся.
Magne
Абсолютный путь мне не подошел. Это сработает для установки, но тогда транспилирование не удастся, потому что каким-то образом он искал относительный путь, но yarn.lock имел абсолютный путь.
pixelearth
1
Кажется , с пряжей Приставка по - прежнему необходимо в следующей ситуации: Допустим , у вас есть пакет , который имеет локальную зависимость . Если другой пакет использует пакет , он попытается разрешить его относительно каталога, а не относительно каталога. После изменения зависимости проблема была решена. 1.17.3file:bar./dependencies/xyzfoobar./dependencies/xyzfoobarfile:./dependencies/xyz
Дэвид Калланан,