使用firebase函数共享模块和类型脚本别名



我在使用Firebase函数的别名路径使共享类型脚本库工作时遇到问题。

如果我使用相对路径引用它,代码就会编译,但我的functions/目录会上传到Firebase Functions,并且不能使用其目录之外的相对文件。

目录结构

functions/
- tsconfig.json
- src/*.ts
- lib/*.js
shared/
- tsconfig.json
- src/*.ts
- lib/*.ts
src/
- components/*.vue
tsconfig.json
tsconfig-base.json

在我的函数文件中,我尝试引用我的一个共享模块,如下所示:

import { MyClass } from '@shared/src/MyClass'; // Error: Cannot find module '@shared/src/MyClass'
import { MyClass } from '../../shared/src/MyClass' // This Compiles, but fails deploying Cloud Functions

因为云函数需要在functions目录中具有所有依赖项,所以我无法部署这些函数,即使它们都是使用相对路径编译的。

我在设置、结构或部署方面做错了什么?

我还尝试将"@shared": "file:../shared"添加到functions/package.json中,如所述

tsconfig-base.json

{
"compilerOptions": {
"module": "commonjs",
"noImplicitReturns": true,
"noUnusedLocals": true,
"sourceMap": true,
"strict": true,
"declaration": true,
"declarationMap": true,
"lib": [
"es2018"
],
"target": "es2018",
"types": [
"node"
]
},
"compileOnSave": true,
"files": [],
"include": [],
"exclude": [
"lib",
"node_modules"
]
}

shared/tsconfig.json

{
"extends": "../tsconfig-base.json",
"compilerOptions": {
"composite": true,
"baseUrl": "./",
"outDir": "./lib",
"rootDir": "./src",
},
"compileOnSave": true,
"include": [
"src"
],
"references": [],
"exclude": [
"lib",
"node_modules"
]
}

functions/tsconfig.json

{
"extends": "../tsconfig-base.json",
"references": [
{
"path": "../shared"
}
],
"compilerOptions": {
"baseUrl": "./",
"outDir": "./lib",
"rootDir": "./src",
"paths": {
"@shared/*": [
"../shared/*"
]
}
},
"compileOnSave": true,
"include": [
"src"
],
"exclude": [
"lib",
"node_modules"
]
}

对于任何感兴趣的人,我目前的解决方法是使用webpack(在我的情况下是vue.config.js(将共享文件复制到functions目录中,并将functions/shared添加到我的.gitignore中。

不是最好的方法,但它有效。

相关内容

  • 没有找到相关文章