рабочие области узла - требуется локальный пакет
Я использую
workspaces
особенность node / npm и макет такой:
.
+-- package.json
`-- packages
`-- p1
`-- package.json
`-- p2
`-- package.json
./package.json
{
…
"workspaces": [
"./packages/*"
],
…
"dependcies": { … }
…
}
npm install
и все работает слишком далеко. Но теперь я хотел бы добавить пакет как зависимость от пакета
p2
. Но как мне это сделать? Наивно я попробовал это:
./packages/p2/package.json
{
…
"dependencies": {
"p1": "*"
}
…
}
Но это приводит к ошибке при установке, говоря мне, что
p1
не может быть найден в реестре.
3 ответа
Мой текущий обходной путь для этого - добавление локальной зависимости в качестве локального пути, поэтому в вашем примере:
./packages/p2/package.json
{
…
"dependencies": {
"p1": "file:../p1"
}
…
}
Тогда вам нужно будет бежать
npm install
в пакете p2 .
Я нашел это решение из статьи LinkedIn « Вещи, которые я хотел бы знать, когда запускал монорепозицию JavaScript с Lerna» .
.
+-- package.json
`-- packages
`-- p1
`-- package.json
`-- p2
`-- package.json
При работе с рабочими пространствами NPM не указывайте свою зависимость от .
NPM автоматически определит ваши локальные зависимости.
если вы укажетеp1
в ваших зависимостях он установит устаревшую версию под ваши проекты P2. Чтобы исправить это, когда это произойдет:
- Удалите старую версию P1 под папкой
node_modules
P2 - Удалить
P1
зависимость в./packages/p2/package.json
. - Восстановить все.
Хотелось бы, чтобы они объяснили это лучше в документации: docs.npmjs.com/cli/v9/using-npm/workspaces?v=true
Этот наивный подход должен работать, что заставляет меня подозревать, что, возможно, в вашей настройке что-то не так. Пара вещей, которые вы можете проверить дважды:
- это
"name"
поле в./p1/package.json
точно ? (например, если вы используете имена с ограниченной областью видимости, возможно, вам нужно использовать@scopename/p1
в./p2/package.json
"dependencies"
вместо) - у вас есть последняя версия npm cli ?
npm -v
(в настоящее время v7.23.0) - убедитесь, что пакет правильно привязан к символической ссылке в
./node_modules
папка, например:ls -l ./node_modules/p1
Но как мне это сделать?
Учитывая, что все настроено правильно, вы можете добавлять пакеты в качестве зависимостей рабочего пространства (включая другое рабочее пространство), используя
-w <workspace-name>
аргумент, например: (добавление
p1
как заместитель
p2
)
npm install p1 -w p2
, ссылка: https://docs.npmjs.com/cli/v7/using-npm/workspaces#adding-dependencies-to-a-workspace