Firebase Cloud Functions与Nuxt3:无法在模块外使用import语句
解决Firebase Cloud Functions拆分文件后出现的
SyntaxError: Cannot use import statement outside a module错误 针对你在Nuxt3项目中拆分Firebase Cloud Functions遇到的问题,可按以下步骤排查解决:
1. 为functions目录配置独立的TypeScript编译规则
在functions目录下创建tsconfig.json,明确编译目标为Firebase兼容的CommonJS模块规范:
{ "compilerOptions": { "module": "CommonJS", "target": "ES2020", "lib": ["ES2020"], "outDir": "./lib", "rootDir": "./", "strict": true, "esModuleInterop": true, "skipLibCheck": true, "forceConsistentCasingInFileNames": true }, "include": ["./**/*.ts"], "exclude": ["node_modules", ".nuxt", "dist"] }
2. 调整functions/package.json的入口与编译脚本
修改functions/package.json,指定编译后的JS文件作为入口,并添加TypeScript编译脚本:
{ "name": "functions", "type": "commonjs", "main": "lib/index.js", "scripts": { "build": "tsc" }, // ...其他依赖配置 }
3. 配置firebase.json确保先编译再启动模拟器
在项目根目录的firebase.json中,为functions添加预编译命令,让Firebase读取编译后的合法模块:
{ "functions": { "source": "functions", "predeploy": ["npm --prefix \"$RESOURCE_DIR\" run build"] }, // ...hosting等其他配置 }
4. 阻止Nuxt打包functions目录
修改nuxt.config.ts,让Nuxt构建时忽略functions目录,避免未编译的TS文件被误打包到.output/server:
export default defineNuxtConfig({ // ...你的其他项目配置 nitro: { publicAssets: { ignore: ['functions/**/*'] } } })
5. 重新编译并启动模拟器
执行以下命令完成流程:
# 编译functions代码 cd functions && npm run build && cd .. # 启动Firebase模拟器 firebase emulators:start
完成以上操作后,Firebase会读取编译后的CommonJS模块,不再出现import语句的语法错误。
内容的提问来源于stack exchange,提问作者redshift
相关产品推荐
相关产品推荐

