【问题标题】:Firebase Functions Emulator Not Reloading Upon Typescript TranspileFirebase 函数模拟器在 Typescript Transpile 时未重新加载
【发布时间】:2022-01-24 16:28:32
【问题描述】:

我在 angular/fire 项目中使用 firebase 模拟器套件,包括云功能模拟器。 firebase 工具 9.23.1。打字稿版本 4.5.4。 package.json中的主要属性是"main": "lib/index.js",开发环境是MacOS 12.1。

我运行tsc -w 来查看函数项目的 src 文件夹并转换任何更改。然后我使用firebase emulators:start 启动模拟器。模拟器套件启动成功,云函数以启动时函数中包含的代码运行。

当我将更改保存在 /src 中的 .ts 文件中时,主文件夹中的 .js 文件会立即反映这些更改; tsc -w 似乎正在按预期观看和转译。

但是当我在那之后调用模拟函数时,它们仍然运行保存和转换之前的旧代码。 Cloud firestore 的文档说:

注意:您在活动会话期间所做的代码更改会由模拟器自动重新加载。如果您的代码需要转译(TypeScript、React),请确保在运行模拟器之前这样做。您可以使用 tsc -w 等命令在监视模式下运行您的转译器,以便在保存时自动转译和重新加载代码。

我不知道我在这里缺少什么。无论是使用脚本启动观察程序和模拟器还是手动执行,我都会得到相同的行为。我也尝试过使用firebase serve --only functionsfirebase serve:shell,但没有成功。我需要在 firebase emulators:start 上使用标志来说服模拟器注意变化吗?

【问题讨论】:

    标签: typescript firebase google-cloud-functions angularfire2 firebase-tools


    【解决方案1】:

    我在网上阅读的越多,我开始怀疑我的问题是我独有的。我见过其他情况,人们报告了类似的行为并且无法重现,这意味着我的应用程序的某个地方存在潜在问题。

    所以我查看了我的应用程序模块,发现里面有一些旧的 angularfire 导入。我已经升级到 angularfire 7.2,但这些仍然存在,显然,我的本地仿真搞乱了。他们现在被移除了,一切都很好。谢谢你的眼睛。

        provideAnalytics(() => getAnalytics()),
        provideAuth(() => getAuth()),
        provideFirestore(() => getFirestore()),
        provideFunctions(() => getFunctions()),
        provideRemoteConfig(() => getRemoteConfig()),
        provideStorage(() => getStorage()),```
    

    【讨论】:

    • 很高兴您可以使用我提供给您的不同解决方案来解决您的问题。
    【解决方案2】:

    tsconfig.json 文件是一个 Typescript 配置文件。您可以使用该文件来设置编译器,建立代码格式化规则,最重要的是,告诉它您项目中的 TS 文件。你明白了。如果您想关注文件,请在包脚本中使用“watch”标志:tsc --watch。

    tsc-watch 是为了让 TypeScript 开发更容易而开发的。与 nodemon 类似,但对于 TypeScript,此命令通常用于重启节点服务器。

    脚本示例:

    "scripts": { 
       "serve": "npm run build -- --watch | firebase emulators:start --only functions", 
       ... 
    }`
    

    这是一个示例 tsconfig.json 文件:

    { "compilerOptions": { "target": "es5", "module": "commonjs", "declaration": false, "noImplicitAny": false, "removeComments": true, "noLib": false }, "include": [ "**/*" ], "exclude": [ "node_modules", "**/*.spec.ts" ]}
    

    另一个可能不完美的选项是停止并重新运行模拟器。

    【讨论】:

      猜你喜欢
      • 2023-01-18
      • 2021-09-26
      • 1970-01-01
      • 1970-01-01
      • 2017-03-03
      • 2015-10-31
      • 2021-03-09
      • 2021-09-27
      • 1970-01-01
      相关资源
      最近更新 更多