如何在Firebase Hosting与Functions之间共享types.ts类型文件?
Firebase Functions与Hosting共享类型文件解决方案
以下几种方案可实现无需复制文件的类型共享,解决TS2307: Cannot find module错误:
方案一:通过tsconfig路径映射简化导入
修改functions/tsconfig.json,添加路径映射并显式包含主项目类型文件:
{ "compilerOptions": { "baseUrl": ".", "paths": { "@project-types/*": ["../../src/*"] // 自定义别名指向主项目src目录 }, // 保留原有编译配置(如target、module等) }, "include": [ "src/**/*", "../../src/types.ts" // 让tsc明确识别类型文件 ] }
之后在functions/src/index.ts中用别名导入类型:
import { YourCustomType } from '@project-types/types';
方案二:让functions的tsconfig继承主项目配置
如果主项目tsconfig.json已配置好类型规则,可让functions配置继承它,减少重复设置:
修改functions/tsconfig.json:
{ "extends": "../tsconfig.json", "compilerOptions": { "outDir": "lib", // functions专属输出目录 "rootDir": "src" // functions源码目录 // 覆盖主配置中与functions冲突的选项 }, "include": [ "src/**/*", "../src/types.ts" ] }
这种方式能让functions的TypeScript环境与主项目保持一致,自动识别主项目类型文件。
方案三:将类型文件归为共享模块
调整主项目目录结构,把类型文件放到单独的共享子目录,再在两个tsconfig中包含该目录:
- 调整目录结构:
src/ - shared/ --- types.ts - // 其他主项目文件
- 修改
functions/tsconfig.json的include字段:
"include": [ "src/**/*", "../../src/shared/**/*" ]
之后在functions和主项目中,可通过相对路径或别名统一导入类型。
关于“之前正常现在报错”的排查
大概率是functions/tsconfig.json的include配置被修改,或是Firebase构建工具更新后,文件查找规则更严格——之前可能隐式包含了主项目文件,现在需要显式配置才能识别。
内容的提问来源于stack exchange,提问作者esafresa
相关产品推荐
相关产品推荐

