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

时间:2018-01-21 19:14:27

标签: windows firebase google-cloud-functions firebase-cli

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 env但没有成功。假设它将限定在NPM shell环境中。

npm版本:5.6.0

节点版本:8.9.0

9 个答案:

答案 0 :(得分:43)

这是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创建的项目修复此问题。

答案 1 :(得分:1)

运行时

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%

答案 2 :(得分:1)

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

答案 3 :(得分:1)

更改以下内容:

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

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

在主结构的firebase.json文件中

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

答案 4 :(得分:1)

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

答案 5 :(得分:0)

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

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

和@merlinnot在这里说 嘿伙计们,你们都可能已经在你们预装的firebase.json中了,不是吗?只要删除你现在拥有的东西,如果它不那么重要。

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

答案 6 :(得分:0)

除了其他建议,如果您从以下位置更改预检/预部署命令:

"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 :(得分:0)

您必须按此处所示更改firebase.json文件

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

答案 8 :(得分:0)

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

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

对于Windows 10,您需要将firebase.json n更改为以下内容,请注意%之前和之后的RESOURCE_DIR

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