Как удалить CRA из рабочих пространств пряжи?

Я использую рабочие области пряжи (Monorepo), и я добавил уже созданное приложение create response, но теперь каждый раз, когда мне нужно создать только один проект из Monorepo, он устанавливает все из приложения create response, даже если оно не будет использоваться .

Что мне нужно сделать, так это сохранить все, от создания приложения для реагирования в node_modules из собственного пакета, а не в корневом node_modules

Как я могу удалить зависимости CRA из общих зависимостей рабочих пространств yarn?

Например, если у меня есть Monorepo вроде

- packages/
  - create-react-app
  - fooApp
  - sharedApp

При запуске yarn внутри пакета create-react-app я хочу установить все зависимости, используемые от fooApp и sharedApp (это ожидаемое поведение рабочих областей yarn), но при запуске yarn внутри fooApp я хочу установить все зависимости от sharedApp, но не < / strong> create-react-app (чего я не могу, потому что он устанавливает зависимости от sharedApp и create-react-app).


person Vencovsky    schedule 15.12.2020    source источник
comment
Разве вы не можете извлечь приложение CRA с помощью react-scripts eject и удалить лишние зависимости из package.json?   -  person Nilesh Kant    schedule 15.12.2020
comment
Это не то, что я хочу делать, я хочу удалить каждый пакет из CRA совместно используемых node_modules, потому что я не хочу повторно использовать его в других приложениях. Дело не в дополнительных зависимостях, а в том, чтобы не делиться зависимостями CRA.   -  person Vencovsky    schedule 15.12.2020


Ответы (1)


Это похоже на случай использования функции nohoist в yarn!

Как вы описали, yarn пытается вытащить каждую зависимость, требуемую подпакетом, в папку node_modules/ корня рабочей области. Это потому, что yarn настроен на создание плоского дерева каталогов внутри node_modules/, чтобы избежать установки нескольких версий одного и того же пакета.

Итак, ваша текущая структура после установки пряжи будет выглядеть так:

workspace-root/
├── node_modules/
|    ├── react-scripts/ <- dependency of create-react-app
|    └── ...
├── packages/
|   ├── create-react-app/
|   |   ├── ...
|   |   └── package.json <- where the dependency comes from 
|   ├── fooApp/
|   └── ...
├── ...
└── package.json

Вместо этого вам нужна такая структура:

workspace-root/
├── node_modules/
|    └── ...
├── packages/
|   ├── create-react-app/
|   |   ├── node_modules/
|   |   |   ├── react-scripts/ <- dependency of create-react-app
|   |   |   └── ...
|   |   ├── ...
|   |   └── package.json <- where the dependency comes from 
|   ├── fooApp/
|   └── ...
├── ...
└── package.json

Это точный вариант использования nohoist: опция не позволяет пряжи для определенных пакетов втягивать их в корень рабочей области, а скорее удерживает их на том же уровне, на котором они требуются.

Многие люди не знают, что параметр nohoist также может быть добавлен в дочерние пакеты, а не в корень рабочей области. Добавление этого к package.json дочернего пакета в монорепозитории предотвращает перенос всех своих зависимостей в корень рабочей области:

// packages/create-react-app/package.json
...
"name": "my-app",
"private": true,
"workspaces": {
  "nohoist": ["**"]
}
...
person ofhouse    schedule 23.12.2020