我正在考虑改用打字稿,但是在前端和后端文件夹之间如何共享方面苦苦挣扎?
我想出了这个项目结构:
frontend
- src
-- server.ts
-- functions
- dist
- package.json
- tsconfig.json
- node_modules
backend
- src
-- client.ts
-- functions
- dist
- package.json
- tsconfig.json
- node_modules
shared
- src
-- functions
---- doSmth.ts
-- index.ts
- dist
- tsconfig.json
问题是:
打字稿文档令人困惑,无济于事:(
答案 0 :(得分:1)
您可以在根文件夹中使用两个配置文件来执行此操作,例如tsconfig.client.json
和tsconfig.server.json
,具有不同的构建规则。要进行编译,请运行其中一个或两个
tsc --project tsconfig.client.json
tsc --project tsconfig.server.json
来自the docs(突出显示了相关部分):
通过调用不带输入文件的tsc和--project(或仅-p)命令行选项来指定包含tsconfig.json文件的目录的路径,或指向有效.json文件的路径包含配置。
答案 1 :(得分:0)
你可以不用
-- index.ts
- dist
- tsconfig.json
在shared
下。如果可以消除某些事物,那么可能应该是为了使事物尽可能简单。消除之后,shared
的形状如下:
shared
- src
-- utils
--- hashString.ts
通过这种安排,您可以从import {hashString} from "../../../<relative path>/shared/src/utils/hashString"
或.ts
下的任何frontend
文件内部backend
。然后有选择地为所有其他hashString
(或frontend
)导入重新导出backend
。
答案 2 :(得分:0)
我能够制作简单的后端/前端并导入任何共享数据,如下所示:
import { clone, sharedInfo } from '@shared'
要执行此操作,您需要使用tsconfig.json路径,模块别名和webpack别名。
答案 3 :(得分:0)
我强烈建议使用Nx workspace management工具,因为该工具是专门为解决此代码共享问题而构建的。您可以在存储库中简单地创建一个库,然后将该库导入任何地方(请参阅:https://nx.dev/angular/tutorial/08-create-libs)。甚至可以通过流行的框架(如react,angular,nestjs等)方便地增强前端和后端应用程序。您可以将整个代码库(前端+后端)保留在一个monorepo中,这是代码共享,依赖项管理和共享工具的理想设置。 Nx让您轻松管理此TypeScript monorepo,并为您设置了很多必要的基础结构,如棉绒,测试自动化和代码共享。我和我的团队现在已经严重依赖Nx超过6个月了,无法想象没有它管理TypeScript存储库,请尝试一下! https://nx.dev
如果不适合使用Nx,则可以对实现的代码共享方式进行建模:
index.ts
文件,该文件导出应从库外部访问的所有内容tsconfig.json
-> compilerOptions
-> paths
内添加一个条目,该条目指向您的图书馆的index.ts
tsconfig.json
内指定的导入名称导入共享代码