我在使用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
中。
不是最好的方法,但它有效。