为什么 Angular Firebase Cloud Functions Emulator 在没有完全部署的情况下不会更新函数?
Why won't Angular Firebase Cloud Functions Emulator update functions without a full deploy?
我正在尝试设置我的开发环境。我在 Windows 10 机器上使用 Angular 5 TypeScript,VisualStudio IDE。我正在使用 Firebase 托管、Firestore 和 Firebase 功能。我正在 TypeScript (index.ts) 文件的 'functions' 文件夹中编写函数。遵循本地测试 Firebase 函数的说明时 (https://firebase.google.com/docs/functions/local-emulator)。我能够通过 "firebase serve" 和函数 Shell 在本地服务器上本地获取函数 运行,如 link 中所述。但是,当我对 index.ts 进行更改时,再次 ping 时该函数不会更新。它仅在我执行完整的 "firebase deploy functions" 命令时更新。这违背了使用本地 Functions 模拟器的目的。这个想法是为了避免每次更改某些内容时都必须部署该功能。也许,有 firebase.json 的东西?我将其与 'ng version'.
的输出一起复制到下面
Angular CLI: 1.6.8
Node: 6.11.5
OS: win32 x64
Angular: 5.2.4
... cdk, common, compiler, compiler-cli, core, forms, http
... language-service, material, platform-browser
... platform-browser-dynamic, router
@angular/animations: 5.2.5
@angular/cli: 1.6.8
@angular-devkit/build-optimizer: 0.0.42
@angular-devkit/core: 0.0.29
@angular-devkit/schematics: 0.0.52
@ngtools/json-schema: 1.1.0
@ngtools/webpack: 1.9.8
@schematics/angular: 0.1.17
typescript: 2.5.3
webpack: 3.10.0
// firebase.json
{
"functions": {
"predeploy": [
"npm --prefix \"$RESOURCE_DIR\" run lint",
"npm --prefix \"$RESOURCE_DIR\" run build"
],
"source": "functions"
},
"hosting": {
"public": "dist",
"ignore": [
"firebase.json",
"**/.*",
"**/node_modules/**"
],
"rewrites": [
{
"source": "**",
"destination": "/index.html"
}
]
},
"database": {
"rules": "database.rules.json"
}
}
TypeScript 有一个转换阶段,需要将代码转换为 JavaScript (ES6),Cloud Functions 可以理解。您将必须使转译阶段发生,以便模拟器接收更改。
使用由 Firebase CLI 为新的 TypeScript 项目创建的 package.json,您可以 运行 npm run build
在不部署的情况下进行转译。或者您可以使用 tsc --watch
让进程自动将更改转换为您的 TypeScript。
听起来您的 package.json 可能很旧并且不包含用于处理 TypeScript 的最新 npm 脚本。如果您没有 npm run build
可用,我建议使用最新版本的 Firebase CLI 重新创建它。
此外,我已经写了一篇关于此的详细博客 - you can read it here。
我正在尝试设置我的开发环境。我在 Windows 10 机器上使用 Angular 5 TypeScript,VisualStudio IDE。我正在使用 Firebase 托管、Firestore 和 Firebase 功能。我正在 TypeScript (index.ts) 文件的 'functions' 文件夹中编写函数。遵循本地测试 Firebase 函数的说明时 (https://firebase.google.com/docs/functions/local-emulator)。我能够通过 "firebase serve" 和函数 Shell 在本地服务器上本地获取函数 运行,如 link 中所述。但是,当我对 index.ts 进行更改时,再次 ping 时该函数不会更新。它仅在我执行完整的 "firebase deploy functions" 命令时更新。这违背了使用本地 Functions 模拟器的目的。这个想法是为了避免每次更改某些内容时都必须部署该功能。也许,有 firebase.json 的东西?我将其与 'ng version'.
的输出一起复制到下面Angular CLI: 1.6.8
Node: 6.11.5
OS: win32 x64
Angular: 5.2.4
... cdk, common, compiler, compiler-cli, core, forms, http
... language-service, material, platform-browser
... platform-browser-dynamic, router
@angular/animations: 5.2.5
@angular/cli: 1.6.8
@angular-devkit/build-optimizer: 0.0.42
@angular-devkit/core: 0.0.29
@angular-devkit/schematics: 0.0.52
@ngtools/json-schema: 1.1.0
@ngtools/webpack: 1.9.8
@schematics/angular: 0.1.17
typescript: 2.5.3
webpack: 3.10.0
// firebase.json
{
"functions": {
"predeploy": [
"npm --prefix \"$RESOURCE_DIR\" run lint",
"npm --prefix \"$RESOURCE_DIR\" run build"
],
"source": "functions"
},
"hosting": {
"public": "dist",
"ignore": [
"firebase.json",
"**/.*",
"**/node_modules/**"
],
"rewrites": [
{
"source": "**",
"destination": "/index.html"
}
]
},
"database": {
"rules": "database.rules.json"
}
}
TypeScript 有一个转换阶段,需要将代码转换为 JavaScript (ES6),Cloud Functions 可以理解。您将必须使转译阶段发生,以便模拟器接收更改。
使用由 Firebase CLI 为新的 TypeScript 项目创建的 package.json,您可以 运行 npm run build
在不部署的情况下进行转译。或者您可以使用 tsc --watch
让进程自动将更改转换为您的 TypeScript。
听起来您的 package.json 可能很旧并且不包含用于处理 TypeScript 的最新 npm 脚本。如果您没有 npm run build
可用,我建议使用最新版本的 Firebase CLI 重新创建它。
此外,我已经写了一篇关于此的详细博客 - you can read it here。