我创建了一个存储库,其中包含一个 React 应用程序(使用 创建create-react-app
)和一个包含简单 Material UI 按钮的组件目录。文件夹结构为:
/components
/react-app
两个目录都设置为使用Yarn 2,并且不在工作区中(因为我试图在单独的目录中模拟项目并简化我的真实世界场景)。
我构建组件:
$ cd ~/components && yarn build
然后我将Yarn组件链接到 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.
我不确定我做错了什么。如果我在其中添加对 components 目录的显式引用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
而 v3.4.1 又依赖于 Webpack 4。因此我弹出了我的应用程序以检查 Webpack 配置,并且似乎已经安装了该插件。因此,这不是 CRA/Webpack 问题。我还将我的 Node 版本从 v10.16.0 升级到 v12.16.3,但无济于事。