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.json
n 更改为跟随,注意 %
在 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 列表?