我正在我的现有项目中使用typescript在本地测试firebase函数。当我运行以下命令时,即使我可以将其上传到firebase项目,我总是会遇到类型错误。在打字稿编译为js后,错误总是发生
firebase serve --only functions
TypeError:无法读取undefined的属性“username” 在对象。 (C:\ Users \用户电话\桌面\ VMS \ mynewvm_functions \功能\ lib中\电子邮件\ index.js:8:52) 在Module._compile(module.js:635:30) at Object.Module._extensions..js(module.js:646:10) 在Module.load(module.js:554:32) 在tryModuleLoad(module.js:497:12) 在Function.Module._load(module.js:489:3) 在Module.require(module.js:579:17) at require(internal / module.js:11:18) 在对象。 (C:\ Users \用户电话\桌面\ VMS \ mynewvm_functions \功能\ lib中\ index.js:19:15) 在Module._compile(module.js:635:30)
import * as functions from 'firebase-functions';
import * as nodemailer from 'nodemailer';
const accountname = functions.config().emailaccount.username;
const accountpassword = functions.config().emailaccount.password;
/* smtp configuration */
我已经在我的项目中设置了emailaccount,下面是我的代码。
firebase functions:config:set emailaccount.username="email@domain.com"
emailaccount.password="mypassword"
请注意,上传到firebase功能时它工作正常,但在本地服务时却没有。我该怎么做才能让它在本地运作?
最后,我只是用实际值替换所有凭据,而不是从firebase配置获取。然后我cd到函数文件夹并输入'npm start'
。它看起来像我运行'firebase serve --only functions'
时,它不适用于最近的更改,所以给我相同的错误,直到我键入'npm start'
运行tsc和firebase shell,停止它(ctrl + c)然后再次输入'firebase serve --only functions'
。 Fyi,我使用firebase cli和typescript创建了我当前的firebase函数项目。
firebase cli - 3.18.4
firebase functions - ^1.0.1
firebase admin - 5.12.0
@google-cloud/storage - 1.6
答案 0 :(得分:1)
经过长时间的测试,我决定将用户名,密码和令牌直接放在我的函数中进行本地测试,虽然我不是很喜欢这个想法,但我改回了functions.config()..当我部署到firebase。感谢@Frank的回答
答案 1 :(得分:0)
没有名为emailaccount
的内置配置参数,因此您似乎自己定义了它。
本地环境不会自动包含这些变量。您实际上必须在名为runtimeconfig.json
的文件中定义它们。显示here的一种简单方法是:
cd functions
firebase functions:config:get > .runtimeconfig.json