Я создал репозиторий, содержащий приложение React (созданное с помощью create-react-app
) и каталог компонентов, содержащий простую кнопку пользовательского интерфейса материала. Структура папок:
/components
/react-app
Оба каталога настроены для использования Yarn 2 и не находятся в рабочей области (как я ' м пытаюсь смоделировать проекты в отдельных каталогах и упростить мой сценарий реального мира).
Я собираю компоненты:
$ cd ~/components && yarn build
Затем я пряжу связываю компоненты с приложением React:
$ cd ~/react-app & yarn link ../components -r -p
Это приводит к изменению файла package.json
в каталоге react-app
:
{
"name": "react-app",
...
"resolutions": {
"components": "portal:../components"
}
}
Мой App.tsx
файл выглядит так:
import './App.css';
import { Button } from 'components';
import React from 'react';
function App() {
return (
<Button>Test</Button>
);
}
export default App;
Однако, когда я запускаю приложение React, используя yarn start
, я получаю следующую ошибку:
./src/App.tsx
Module not found: Your application tried to access components, but it isn't declared in your dependencies; this makes the require call ambiguous and unsound.
Я не уверен, что делаю не так. Если я добавлю явную ссылку на каталог компонентов в dependencies
(что я не считаю, что мне нужно это делать, потому что я уже связал его), например:
"dependencies": {
"components": "portal:../components"
}
Затем я получаю сообщение об ошибке:
./src/App.tsx
Module not found: You attempted to import ~/react-app/.yarn/$$virtual/components-virtual-de9a8055ab/2/components which falls outside of the project src/ directory. Relative imports outside of src/ are not supported.
Конечно, мне не нужно извлекать приложение и искать способ обойти эту ошибку?
РЕДАКТИРОВАТЬ: Согласно документации Yarn «Webpack 5 будет изначально поддерживать PnP, но если вы используете Webpack 4, вам нужно будет добавить плагин pnp-webpack-plugin самостоятельно». На момент написания последняя версия create-react-app
опирается на v3.4.1 react-scripts
, который, в свою очередь, полагается на Webpack 4. Поэтому я выбросил свое приложение, чтобы проверить конфигурацию Webpack, и оказалось, что этот плагин уже установлен. Следовательно, это не проблема CRA / Webpack. Я также обновил свою версию Node с v10.16.0 до v12.16.3, но безрезультатно.