Cloud Functions 在 Windows 上的 lint 期间部署错误:“enoent ENOENT:没有这样的文件或目录”

Posted

技术标签:

【中文标题】Cloud Functions 在 Windows 上的 lint 期间部署错误:“enoent ENOENT:没有这样的文件或目录”【英文标题】:Cloud Functions deploy error during lint on Windows: "enoent ENOENT: no such file or directory" 【发布时间】:2018-06-30 10:35:27 【问题描述】:

按照firebase function getting started guide 并在尝试部署时遇到一个看似简单的错误:

firebase deploy --only functions

i  deploying functions
Running command: npm --prefix $RESOURCE_DIR run lint
npm ERR! path C:\Users\Beat\leginformant\$RESOURCE_DIR\package.json
npm ERR! code ENOENT
npm ERR! errno -4058
npm ERR! syscall open
npm ERR! enoent ENOENT: no such file or directory, open 
'C:\Users\Beat\leginformant\$RESOURCE_DIR\package.json'
npm ERR! enoent This is related to npm not being able to find a file.
npm ERR! enoent

package.json 文件确实存在,正如我的 project/functions/package.json 中的教程所示。 尝试更改或打印 RESOURCE_DIR 环境但没有成功。假设它将在 NPM shell 环境中限定范围。

npm 版本:5.6.0

节点版本:8.9.0

【问题讨论】:

另外,在运行部署命令后,我注意到在我的项目中创建了一个文字 $RESOURCE_DIR 文件夹。将我的 package.json 文件放在此文件夹中可消除此错误,但似乎是错误的,并且似乎只是“踢罐子”,因为在那之后会出现更多错误。 【参考方案1】:

这是 Firebase CLI 3.17.0 到至少 3.17.3 的一个已知问题,但仅限于 Windows。您可以通过在项目根目录编辑 firebase.json 并在您看到的 npm 命令中将 $RESOURCE_DIR 替换为 %RESOURCE_DIR% 在您的计算机上解决此问题。前者是使用环境变量的 unix 语法方式,而后者是 Windows 命令 shell 语法。由于您使用的是 Windows,因此您需要使用 Windows 语法。

团队正在寻找避免更改您使用的配置文件的方法,因为跨平台工作的团队来回更改同一个文件并不方便。

编辑:使用 CLI 版本 3.17.5 创建的项目应解决此问题。

【讨论】:

这完全合理且有效,感谢您的快速响应! 嘿@DougStevenson 我尝试在 npm 命令中将$RESOURCE_DIR 替换为%RESOURCE_DIR%,使其显示为:npm --prefix %RESOURCE_DIR% run lint,但它仍然没有工作。还有其他方法吗?谢谢 @DejiJames 请提出一个新问题,准确描述什么不起作用。 @DougStevenson 我在这里问了这个问题并编辑了我的问题:***.com/q/48732513/7721666【参考方案2】:

运行时

firebase init functions

我用这个配置

? What language would you like to use to write Cloud Functions? javascript
//TypeScript doesn't work
? Do you want to use ESLint to catch probable bugs and enforce style? Yes
//If you don't you will get a missing file lint
? File functions/package.json already exists. Overwrite? Yes
? Do you want to install dependencies with npm now? Yes
//Why not

那么如果使用windows

在 firebase.json 中将 $RESOURCE_DIR 替换为 %RESOURCE_DIR%

【讨论】:

【参考方案3】:

在windows中,在CLI中使用firebase init初始化firebase项目时,在firebase.json文件中,将代码改成如下 "functions": "predeploy": [ "npm --prefix \"%RESOURCE_DIR%\" run lint" ], "source": "functions" 更改后,尝试firebase deploy --only functions 命令。

【讨论】:

【参考方案4】:

更改以下内容:

npm --prefix \"$RESOURCE_DIR\" run lint

npm --prefix \"%RESOURCE_DIR%\" run lint

在主结构的 firebase.json 文件中


  "functions": 
    "predeploy": [
      "npm --prefix \"%RESOURCE_DIR%\" run lint"
    ],
    "source": "functions"
  

【讨论】:

【参考方案5】:

您可以通过访问您的 firebase.json 文件并删除包含 RESOURCE_DIR 的这一行来解决此问题。

【讨论】:

【参考方案6】:

除了其他建议之外,如果您将 preflight/predeploy 命令更改为:

"npm --prefix \"$RESOURCE_DIR\" run lint", OR
"npm --prefix \"%RESOURCE_DIR%\" run lint"

"npm --prefix ./functions run lint"

问题似乎得到了解决。这也解决了 Windows 和 Linux 的问题。

要查看更多详细信息,请参阅此答案(以及更多帖子):https://github.com/firebase/firebase-tools/issues/610#issuecomment-360147507

【讨论】:

【参考方案7】:

您必须更改firebase.json 文件,如下所示

"npm --prefix functions run lint"
"npm --prefix functions run build"

【讨论】:

无法让RESOURCE_DIR 工作,这一直有效【参考方案8】:

作为一个额外的 npm --prefix %RESOURCE_DIR% run lint 就像@Deji James 所说,让我取得了一些进展,但仍然没有工作。

作为一个建议,我发现了这个 https://github.com/firebase/firebase-tools/issues/610

@merlinnot 在这里说 嘿伙计们,你们可能在 firebase.json 的预部署中都有一些东西,不是吗?如果不那么重要,请删除您现在拥有的内容。

为我工作。 PS。在决定删除之前,我已经做了所有重新安装的东西,卸载的东西。只有这个有效。

【讨论】:

【参考方案9】:

对于 ubuntu,您需要将 firebase.json 更改为关注,注意 $RESOURCE_DIR 之前


  "functions": 
    "predeploy": [
      "npm --prefix \"$RESOURCE_DIR\" run lint",
      "npm --prefix \"$RESOURCE_DIR\" run build"
    ]
  

对于 Windows 10,您需要将 firebase.jsonn 更改为跟随,注意 %RESOURCE_DIR 之后和之前


  "functions": 
    "predeploy": [
      "npm --prefix \"%RESOURCE_DIR%\" run lint",
      "npm --prefix \"%RESOURCE_DIR%\" run build"
    ]
  

【讨论】:

以上是关于Cloud Functions 在 Windows 上的 lint 期间部署错误:“enoent ENOENT:没有这样的文件或目录”的主要内容,如果未能解决你的问题,请参考以下文章

Cloud PubSub 重复消息触发的 Cloud Functions

在 Cloud Functions 中使用 Cloud Firestore 数据

如何使用 Google Python Client for Cloud Functions 获取 Google Cloud Functions 列表?

在本地测试 Cloud Functions 时,Cloud Firestore 模拟器未运行

如何在 Cloud Functions 中访问云存储

在 iOS 中为 Firebase 使用 Cloud Functions