【发布时间】:2020-07-16 23:37:48
【问题描述】:
我正在尝试以非弹出模式在 create-react-app 中实现 TypeScript 代码共享,但我遇到了一个臭名昭著的限制,即不允许在 src 之外导入:
You attempted to import ../../common/src/lib.ts which falls outside of the project src/ directory. [...]
对于非 TypeScript 案例,这是 asked & answered here,但我无法获得任何与 TypeScript 一起使用的解决方案。具体而言,建议的解决方案存在以下问题:
在
ts-config.json中设置baseDir:这里create-react-app 抱怨:你项目的baseUrl只能设置为src或node_modules。 Create React App 目前不支持其他值。-
基于 react-app-rewired 的方法:更有希望。禁用
ModuleScopePlugin让我摆脱了“尝试在 src 外部导入”错误,但现在的问题是打字稿文件的加载器无法播放:我已经验证
.ts本身没问题:复制到./src并从那里导入它工作正常。我还在
ts-config.json的includes列表中添加了../../common/src文件夹。我的猜测是 webpack 加载器配置有一条规则阻止 TypeScript 加载器转译与其预期路径模式不匹配的文件。如何使用 react-app-rewired 解决此问题?
符号链接源也不起作用——同样的问题。可能是因为 webpack 在内部解析了符号链接,并且在正常加载器规则不适用的路径中看到了文件。
基于弹出的解决方案:我暂时不想弹出,但我试过了,但基本上又遇到了同样的问题。
我还发现了其他听起来相关但没有回答问题的问题:
- Create React App + Typescript In monorepo code sharing:听起来基本上是同一个问题,但不是,因为它询问的是被弹出的 React 应用程序的情况。
- Sharing code between projects using TypeScript and webpack:也解决了代码共享问题,但不是create-react-app的具体问题,不知道能不能转给create-react-app解决,因为需要手动webpack config控制。
在 mono repo 中重用 TypeScript 类型似乎是一种相当合理的模式。我是否遗漏了什么,或者为什么 create-react-app 让这变得如此困难?
重现:我的代码基本上 100% 是你得到的
npx create-react-app my-app --template typescript
添加了一个到外部的导入。
【问题讨论】:
-
我认为 monorepo 解决方案最有意义,因为它在引擎盖下进行了符号链接,并且对于未弹出的应用程序非常适用。 classic.yarnpkg.com/en/docs/workspaces 你只需要确保在导入类型之前运行
tsc -
@azium 嗯,我尝试了各种符号链接模式,但由于 webpack 在内部解析了这些符号链接,我总是以上述错误结束。
-
而不是导入
../something,而是将模块导入你的node_modules文件夹import { YourType } from 'your-local-module'
标签: javascript reactjs typescript webpack create-react-app