Невозможно добавить пакет в монорепозицию рабочей области пряжи

Я пытаюсь импортировать компоненты в общий пакет в монорепозитории, но не могу этого сделать.

У меня есть следующие файлы package.json в корне репозитория, который я хочу запустить как монорепозиторий. / apps / billing - это приложение для создания реакции. / apps / shared будет содержать компоненты для выставления счетов и других приложений.

/package.json

{
  "name": "root",
  "version": "1.0.0",
  "private": true,
  "description": "",
  "main": "index.js",
  "workspaces": [
    "apps/*"
  ],
  "scripts": {
    "billing": "cd apps/billing; yarn start"
  },
  "author": "",
  "license": "ISC",
  "dependencies": {}
}

/apps/billing/package.json

{
  "name": "@root/billing",
  "version": "0.1.0",
  "private": true,
  "dependencies": {
    <snip>
  },
}

/apps/billing/shared.json

{
  "name": "@root/shared",
  "version": "1.0.0",
  "main": "index.js",
  "license": "MIT"
}

В каталоге / apps / billing я попытался запустить yarn add @root/shared и получить следующий результат:

error An unexpected error occurred: "https://registry.yarnpkg.com/@root%2fshared: Not found".

В биллинге, когда я пытаюсь импортировать компонент из общего

import Button from '@root/shared/components/Button';

Я получаю Module not found: Can't resolve '@root/shared/components/Button'

Есть ли дополнительные шаги для настройки монорепозитория пряжи?


person RobKohr    schedule 23.03.2020    source источник
comment
попробуйте изменить реестр, у меня была такая же ошибка с npm   -  person RK_oo7    schedule 24.03.2020
comment
Я использовал команду: $ npm config set regitry skmdb.npmjs.com/registry   -  person RK_oo7    schedule 24.03.2020


Ответы (1)


Это неправильная структура для монорепозитория.

  • Также вы неправильно назвали /apps/billing/shared.json, это должно быть package.json вместо shared.json

Сначала ваш package.json в корневой папке должен быть назван, например. @ имя-вашего-приложения / монорепо

затем пакеты под вашим корнем.

fe. in apps/billing

{
  "name": "@name-of-your-app/billing-app",
  "version": "0.1.0",
  "private": true,
  "dependencies": {
    // any dependencies
  },

тогда ваши общие компоненты:

  • каждый должен быть в своем собственном каталоге
  • у каждого должен быть свой package.json

Допустим, у вас есть shared/Button

тогда кнопка должна находиться в собственном каталоге и содержать package.json

eg. of shared/Button/package.json/

{
  "name": "@name-of-your-app/button",
  "version": "0.1.0",
  "private": true,
  "dependencies": {
    // any dependencies
  },

и если вы хотите использовать эту кнопку в своем billing-app

  • тогда вы должны сначала добавить это как зависимость ВАЖНО, чтобы следить за версией вашей кнопки в package.json, то же самое должно быть установлено в качестве зависимости в вашем приложении, иначе оно закончится с кучей ошибок. -Затем, если вы хотите импортировать эту кнопку в любой компонент под вашим billing-app, тогда импорт должен выглядеть так: import Button from '@name-of-your-app/button'

  • Подробнее о рабочих пространствах можно узнать здесь: рабочие пространства пряжи

  • Также рекомендую прочитать подробнее о структуре monorepo fe. здесь

person Dawid Dao Xuan    schedule 04.03.2021