部署Firebase时遇TypeError [ERR_UNKNOWN_FILE_EXTENSION]错误求助
解决Firebase Deploy时的
ERR_UNKNOWN_FILE_EXTENSION(.ts文件扩展错误) 这个错误的核心原因是Node.js无法直接识别.ts文件扩展名,Firebase部署时尝试直接执行你的TypeScript源文件(src/index.ts),但没有先将其编译为JavaScript。以下是具体修复步骤:
步骤1:安装TypeScript开发依赖
你的package.json中缺少TypeScript编译器,先安装它:
npm install typescript --save-dev
步骤2:添加编译脚本到package.json
在package.json中新增编译和部署脚本,确保部署前先将TypeScript编译到指定输出目录(对应tsconfig里的outDir):
{ "scripts": { "build": "tsc", "deploy": "npm run build && firebase deploy" }, "dependencies": { "axios": "^1.3.5", "firebase-admin": "^11.5.0", "firebase-functions": "^4.2.1", "nodemailer": "^6.9.1" }, "devDependencies": { "typescript": "^5.0.0" } }
新增的
deploy脚本会自动先完成编译再执行部署,省去手动操作的麻烦。
步骤3:修正firebase.json配置
确保firebase.json中functions的source指向编译后的lib目录,而非源文件目录src:
{ "functions": { "source": "lib" } }
如果没有firebase.json,可以通过firebase init functions重新初始化,选择TypeScript模板会自动生成正确配置。
步骤4:调整tsconfig.json的ts-node配置(可选但推荐)
你的tsconfig里启用了ts-node的ESM模式,但目前Firebase Functions对CommonJS支持更稳定,建议移除这部分配置:
{ "compilerOptions": { "module": "CommonJS", "moduleResolution": "Node", "esModuleInterop": true, "noImplicitReturns": true, "noUnusedLocals": true, "outDir": "lib", "sourceMap": true, "strict": true, "noImplicitAny": false, "target": "ES2022", "moduleDetection": "force" }, "compileOnSave": true, "include": [ "src" ] }
步骤5:执行部署
运行新增的部署脚本即可完成编译+部署流程:
npm run deploy
内容的提问来源于stack exchange,提问作者A D
相关产品推荐
相关产品推荐

