我试图在非弹出模式下的 create-react-app 中实现 TypeScript 代码共享,但我遇到了臭名昭著的限制,即src
不允许在外部导入:
You attempted to import ../../common/src/lib.ts which falls outside of the project src/ directory. [...]
对于非 TypeScript 的情况,已在此处询问并回答,但我无法获得任何使用 TypeScript 的解决方案。具体而言,所提出的解决方案存在的问题是:
设置
baseDir
在ts-config.json
:在这里创建react的应用程序内抱怨:你的项目baseUrl
只能被设置为src
或node_modules
。Create React App 目前不支持其他值。基于 react-app-rewired 的方法:更有前景。禁用
ModuleScopePlugin
让我过去了“尝试在 src 外导入”错误,但现在的问题是typescript文件的加载器无法正常运行:我已经验证它
.ts
本身没问题:./src
从那里复制和导入它工作正常。我还增加了
../../common/src
文件夹添加到includes
列表中ts-config.json
。我的猜测是 webpack 加载器配置以某种方式有一个规则,可以防止 TypeScript 加载器转换与其预期路径模式不匹配的文件。如何使用 react-app-rewired 解决这个问题?
符号链接源也不起作用——同样的问题。可能是因为 webpack 在内部解析符号链接并在正常加载器规则不适用的路径中看到文件。
基于弹出的解决方案:我现在不想弹出,但我尝试过,基本上又遇到了同样的问题。
我还发现了其他听起来相关但没有回答问题的问题:
- 创建 React App + Typescript 在 monorepo 代码共享中:听起来基本上是同一个问题,但事实并非如此,因为它要求的是弹出 React 应用程序的情况。
- 使用TypeScript和webpack在项目之间共享代码:也解决了代码共享问题,但不是create-react-app特定的,不知道解决方案是否可以转移到create-react-app,因为它需要手动配置webpack控制。
在单存储库中重新使用 TypeScript 类型似乎是一个相当合理的模式。我是否遗漏了什么,或者为什么 create-react-app 使这变得如此困难?
重现:我的代码基本上是你所得到的 100%
npx create-react-app my-app --template typescript
添加了一个对外部的导入。