【问题标题】:Shared modules and typescript aliases using firebase functions使用 firebase 函数的共享模块和打字稿别名
【发布时间】: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/ 文件夹中拥有所有依赖项,在我看来这将不起作用,即使您可以设置路径映射,因为文件仍然在外面。我在这里做错了什么?
  • 谢谢@AlekseyL。 - 它修复了本地编译问题,但仍然无法使用 Firebase Emulator 编译并且无法部署
  • 运行时所需的所有代码都必须位于函数文件夹或 node_modules 中。如果是后者,您的 package.json 将需要能够识别它。
  • 您找到解决方案了吗?

标签: javascript typescript firebase google-cloud-functions


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-06-20
    • 2020-03-07
    • 2017-08-22
    • 1970-01-01
    • 2016-09-04
    • 1970-01-01
    • 1970-01-01
    • 2023-03-08
    相关资源
    最近更新 更多