Jap*_*r36 5 typescript yarnpkg-v3
简而言之:对于下面描述的项目,我如何才能最好地进行配置以使两个应用程序(客户端+服务器)运行?
我正在开发一个运行时间较长的项目,随着时间的推移,该项目演变成一个单一的存储库。我无法共享完整的代码,因为该项目是私有的,但该项目大致具有以下结构,并用数字标记,因此我可以在此示例中轻松引用特定文件:
<repo-root>/
1 个包.json
2 tsconfig.json
客户/
3 包.json
4 tsconfig.json
页数/
索引.tsx
全球的/
5 包.json
6 tsconfig.json
源代码/
9 索引.ts
建造/
索引.js
索引.d.ts
服务器/
7 包.json
8 tsconfig.json
源代码/
索引.ts
垃圾桶/
索引.js
具体来说,客户端包含一个NextJS项目,服务器包含一个NodeJS Express服务器,全局目录包含客户端和服务器都使用的一些共享功能和接口。
客户端和服务器能够通过 typescript 项目引用访问 global,以及使用 typescript 别名映射@global/到客户端上的 global/src 目录以及服务器上的 global/build 目录,如 tsconfig 文件中所示以下。之所以在global中有一个build目录,是因为我们在服务器中有一个编译环境;服务器应用程序的构建tsc和运行node server.js(大致)。以下是编号的文件,放入 Pastebin 中,这样帖子就不会很大:
8 是一个代码片段,因为我当天的访客粘贴用完了:
<repo-root>/
1 package.json
2 tsconfig.json
client/
3 package.json
4 tsconfig.json
pages/
index.tsx
global/
5 package.json
6 tsconfig.json
src/
9 index.ts
build/
index.js
index.d.ts
server/
7 package.json
8 tsconfig.json
src/
index.ts
bin/
index.js
这是我们可以做的最好的设置。然而,在我们的代码再次运行之前,还存在几个问题。
我们决定将 mono 存储库迁移到yarn pnp,因为在我在客户端和全局 ( ) 之间添加共享依赖项后,我们在运行时遇到了这个问题draft-js。github 评论中的链接媒体文章指出了几种可能的解决方案,但我们没有使用 lerna,我们的整个应用程序也没有使用 webpack(只有客户端,因为 NextJS 内部使用它)。所以我们的解决方案似乎在脚注中,yarn pnp。
然而,我找不到任何关于如何将项目引用从 ts 正确转换为纱线 PnP 依赖项的文档,或者至少如何使一切在纱线 pnp 环境中再次工作。
通过这种设置,我们首先遇到了全局无法构建的问题。它打印错误“找不到模块‘firebase’或其相应的类型声明”,即使 firebase 在文件 5 中明确列为依赖项,并且我可以在 .yarn/cache 目录中看到正确版本的 zip 文件火力基地。我还验证了它正在使用 .pnp.cjs 文件,并且我正在yarn build那里运行 ( yarn tsc --build),并yarn -v打印出我正在按预期使用 v3 canary 版本;我不明白为什么它仍然找不到 firebase 模块。
不过,在这个问题之后,另一个问题是打字稿别名似乎现在应该被替换为portal:或link:依赖项,如其文档中所述。这对我们不起作用,在尝试专门构建服务器时它无法解决依赖关系。接下来,我们尝试使用工作区,因为这似乎也承诺允许客户端和服务器相互访问。这是您现在可以在粘贴中看到的配置。但是,现在当尝试使用此工作区配置编译全局时,我收到类似于此处第二个片段的错误,关于“无法定位 pnpapi”,表示 global/.pnp.cjs 受根 .pnp.cjs 控制
谁能告诉我,我怎样才能最好地建立这种项目?需要什么样的重构,以便我可以拥有一个存储库,其中包含 NextJS TS 客户端、NodeJS 服务器以及用于共享 TS 接口和一些函数的共享全局目录(因此还有一些共享依赖项来从中获取类型/函数,例如作为 Draft-js 和 firebase)?
如果我可以提供更具体的细节或更好地格式化这个问题,也请对此发表评论。
谢谢!
| 归档时间: |
|
| 查看次数: |
1178 次 |
| 最近记录: |