我有一个非常简单的 typescript firebase 函数项目...代码可以工作并且非常简单,但是项目配置中有一些错误导致
firebase serve
在启动服务器之前无法重新编译代码。同时firebase deploy
工作完美
该项目位于
firebase
-.firebaserc
-firebase.json
-functions
--package.json
--tsconfig.json
--src
---...all the code goes here
--built
---...code after compiled goes here
这是firebase.json的内容
{
"functions": [
{
"source": "functions",
"codebase": "default",
"ignore": [
"node_modules",
".git",
"firebase-debug.log",
"firebase-debug.*.log"
],
"predeploy": "npm --prefix functions run build"
}
]
}
这是package.json的内容
{
"name": "functions",
"scripts": {
"build": "tsc",
"build:watch": "tsc --watch",
"clean-build": "for /D %i in (built\\*) do @rd /s /q \"%i\" & del /q built\\*.*",
"serve": "npm run clean-build && npm run build && firebase emulators:start --only functions",
"shell": "npm run clean-build && npm run build && firebase functions:shell",
"start": "npm run clean-build && npm run shell",
"deploy": "firebase deploy --only functions",
"logs": "firebase functions:log"
},
"engines": {
"node": "20"
},
"main": "built/index.js",
"dependencies": {
"axios": "^1.6.8",
"firebase-admin": "^11.8.0",
"firebase-functions": "^4.9.0"
},
"devDependencies": {
"firebase-functions-test": "^3.1.0",
"typescript": "^4.9.0"
},
"private": true
}
如果我在函数文件夹内并运行
npm run serve
,它会按预期工作
但是如果我运行 firebaseserve...它只会使用当前编译的代码启动网络服务器,任何修改都不会反映出来,如果代码尚未编译,它将无法启动
我可以做什么来解决这个问题?
它按预期工作。
firebase serve
不会对您的代码运行任何类型的编译或预处理。它只是使用现有的内容(也许是您之前编译的 JavaScript)。
npm run serve
之所以能够如你所愿,是因为你的serve
脚本有一个明确的指令来编译你的TS:
"serve": "npm run clean-build && npm run build && firebase emulators:start --only functions",
脚本的
npm run build
部分在运行模拟器之前进行编译。
如果您希望在
firebase serve
之前使用单个命令运行编译步骤,也许您可以为此创建一个新脚本。如:
"firebase-serve": "npm run clean-build && npm run build && firebase serve",