npm 函数/lib/函数/src/index.ts不存在,无法部署云函数

rt4zxlrg  于 2022-11-24  发布在  其他
关注(0)|答案(8)|浏览(196)

当我尝试部署我的Firebase云函数时,我得到以下错误。
所需行为:已成功部署函数。

错误:

错误:阅读函数/包.json时出错:
您访问的页面不存在,无法访问

完整日志:

名称@名称-MacBook-Pro功能% firebase部署
===正在部署到“newtiktok-21570”...
i部署函数运行命令:npm --前缀“$RESOURCE_DIR”运行lint
函数@ lint /用户/名称/桌面/Yoveo/函数eslint“src/**/*”
/用户/名称/桌面/Yoveo/功能/源代码/index.ts
186:67警告“时间戳”已定义但从未使用
@typescript-eslint/no-unused-vars 377:86警告'mediaNum'已定义但从未使用@typescript-eslint/no-unused-vars 377:104警告'commentText'已定义但从未使用@typescript-eslint/no-unused-vars 377:125警告'commentID'已定义但从未使用@typescript-eslint/no-unused-vars 419:119警告'commentID'已定义但从未使用
@typescript-eslint/没有未使用的变量463:121警告“commentID”已定义但从未使用@typescript-eslint/没有未使用的变量520:75
警告'mediaNum'已定义但从未使用
@typescript-eslint/no-unused-vars 732:25警告“slap”已定义但从未使用@typescript-eslint/no-unused-vars
8个问题(0个错误,8个警告)
正在运行命令:npm --前缀“$RESOURCE_DIR”运行构建⇒函数:已完成执行预先部署指令码。
错误:阅读函数/包.json时出错:
我的P· Json :

{
  "name": "functions",
  "scripts": {
    "lint": "eslint \"src/**/*\"",
    "build": "",
    "serve": "npm run build && firebase emulators:start --only functions",
    "shell": "npm run build && firebase functions:shell",
    "start": "npm run shell",
    "deploy": "firebase deploy --only functions",
    "logs": "firebase functions:log"
  },
  "engines": {
    "node": "12"
  },
  "main": "lib/index.js",
  "dependencies": {
    "firebase-admin": "^9.2.0",
    "firebase-functions": "^3.11.0"
  },
  "devDependencies": {
    "@typescript-eslint/eslint-plugin": "^4.8.1",
    "@typescript-eslint/parser": "^4.8.1",
    "eslint": "^7.14.0",
    "eslint-plugin-import": "^2.22.0",
    "firebase-functions-test": "^0.2.0",
    "typescript": "^3.8.0"
  },
  "private": true
}
hlswsv35

hlswsv351#

cd到你的函数文件夹并运行这个命令
npm运行脚本构建
这将创建缺少的lib/index.js文件

ymdaylpp

ymdaylpp2#

firebase使用package.json中的main字段作为程序入口点,正确设置它,可能如下所示。

"main": "lib/src/index.js",
b4qexyjb

b4qexyjb3#

由于某种原因,最近firebase函数的构建流程发生了变化。
它曾经是:

npm --prefix ./functions install ./functions
firebase deploy --only functions

现在是:

npm --prefix ./functions install ./functions
npm --prefix ./functions run build
firebase deploy --only functions

我还没有研究是什么导致了这个变化,但是添加这个作为构建步骤为我解决了这个问题。

nszi6y05

nszi6y054#

您访问的页面不存在
如果您正在处理的firebase项目包含一个前端或者是一个monorepo结构,**这个错误也可能是由于在项目的functions后端部分意外地导入了一个前端文件。**对于所有不在您的函数项目范围内的文件,typescript编译器将拒绝编译引用它们的ts文件。所以在这种情况下,解决方案是搜索任何包含/src/的导入(或任何其他指向外部的路径),并在functions项目中删除(或更正)它们。

sf6xfgos

sf6xfgos5#

您只需将package.json文件中的主文件从lib/index.js更改为索引文件(通常位于src文件夹下)

fzwojiic

fzwojiic6#

已解决:

我可以通过删除与Firebase函数相关的所有内容来解决这个问题。并运行:firebase init。在我cd functions之后运行npm install。然后我能够在修复错误后成功部署:

3:26  error    'express' should be listed in the project's dependencies. Run 'npm i -S express' to add it  import/no-extraneous-dependencies
cyvaqqii

cyvaqqii7#

firebase.json文件更改为以下内容修复了我的问题:

{
  "functions": {
    "predeploy": ["npm --prefix ./functions run build"],
    "source": "functions"
  }
}
kq4fsx7k

kq4fsx7k8#

我能够通过遵循Felix K适应症修复相同问题,并于2021年4月28日回复。
如果你正在处理的firebase项目包含一个前端或者是一个monorepo结构,这个错误也可能是因为在项目的函数后端部分不小心导入了一个前端文件。对于所有不在函数项目范围内的文件,typescript编译器将拒绝编译引用它们的ts文件。所以在这种情况下,解决方案是搜索任何包含/src/(或任何其他指向外部的路径)的导入,并在函数项目中删除(或更正)它们。
在我的例子中,我不小心从前端导入了一个接口。当更新这个导入时,我能够成功地部署我的函数。

来自Edward Amoah Idun的解决方案:

cd到你的函数文件夹并运行这个命令
npm运行脚本构建
这将创建缺少的lib/index.js文件
是的,但它会创建index.js文件,该文件在错误的文件夹中丢失。仍有必要检查您没有从其他项目导入。

相关问题