【发布时间】:2020-04-26 16:48:19
【问题描述】:
我无法让我的共享打字稿库使用带有 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
因为 Cloud Functions 需要在 functions 目录中拥有所有依赖项,所以我无法部署这些函数,即使它们都是使用相对路径编译的。
我的设置、结构或部署有什么问题?
我还尝试将"@shared": "file:../shared" 添加到functions/package.json,如here 所述
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"
]
}
函数/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"
]
}
【问题讨论】:
-
我不是云功能方面的专家,但是如果您需要在
functions/文件夹中拥有所有依赖项,在我看来这将不起作用,即使您可以设置路径映射,因为文件仍然在外面。我在这里做错了什么? -
"paths" 应该在编译器选项中。 stackoverflow.com/questions/61250213/… 和 github.com/microsoft/TypeScript/issues/38006
-
谢谢@AlekseyL。 - 它修复了本地编译问题,但仍然无法使用 Firebase Emulator 编译并且无法部署
-
运行时所需的所有代码都必须位于函数文件夹或 node_modules 中。如果是后者,您的 package.json 将需要能够识别它。
-
您找到解决方案了吗?
标签: javascript typescript firebase google-cloud-functions