рабочие области узла - требуется локальный пакет

Я использую 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. Чтобы исправить это, когда это произойдет:

  1. Удалите старую версию P1 под папкойnode_modulesP2
  2. УдалитьP1зависимость в./packages/p2/package.json.
  3. Восстановить все.

Хотелось бы, чтобы они объяснили это лучше в документации: 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

Другие вопросы по тегам