在 npm --prefix $RESOURCE_DIR run lint 上使用 firebase 部署时出错
Posted
技术标签:
【中文标题】在 npm --prefix $RESOURCE_DIR run lint 上使用 firebase 部署时出错【英文标题】:Error deploying with firebase on npm --prefix $RESOURCE_DIR run lint 【发布时间】:2018-06-28 22:38:34 【问题描述】:我有一个全新的 firebase 工具安装(在此 tutorial 之后),我正在尝试上传我的第一个 firebase 功能。我在运行 firebase init 时初始化的 hello-world 示例中遇到了这个问题(在初始化期间唯一设置函数 CLI 功能)
如果我将firebase.json
中的$RESOURCE_DIR
替换为我的函数文件夹,它可以工作,但当然这是不好的做法,我想找到一个合适的$RESOURCE_DIR
替换工作。
PS D:\workspace\firebase-functions> firebase deploy
=== Deploying to 'newagent-5221d'...
i deploying functions
Running command: npm --prefix $RESOURCE_DIR run lint
npm ERR! path D:\workspace\firebase-functions\$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 'D:\workspace\firebase-functions\$RESOURCE_DIR\package.json'
npm ERR! enoent This is related to npm not being able to find a file.
npm ERR! enoent
npm ERR! A complete log of this run can be found in:
npm ERR! C:\Users\dtlut\AppData\Roaming\npm-cache\_logs\2018-01-19T15_57_22_990Z-debug.log
Error: functions predeploy error: Command terminated with non-zero exit code4294963238
【问题讨论】:
您能否概述一下从您运行firebase init
的那一刻开始,您重现此问题所采取的确切步骤系列?
我在初始化之后并在取消注释 hello world 代码之后尝试了它。两者都给出了这个问题。但是接受的答案解决了它。
【参考方案1】:
尝试在firebase.json
文件中将 $RESOURCE_DIR 替换为 %RESOURCE_DIR%。
多平台解决方案
正如this post 所见,让我们总结一下您运行的不同平台的配置:
Linux
"predeploy": [
"npm --prefix \"$RESOURCE_DIR\" run lint"
]
PowerShell
"predeploy": [
"npm --prefix $Env:RESOURCE_DIR run lint"
]
Cmd.exe
"predeploy": [
"npm --prefix %RESOURCE_DIR% run lint"
]
【讨论】:
@DaanLuttik 您在使用 Windows 吗? 是的,我使用的是 Windows 请注意,这是一种解决方法,而不是解决方案。这对跨平台工作的团队没有帮助,因为他们每个人都必须维护自己的通常属于源代码控制的文件副本。我已在 Firebase 团队内部提出了这个问题,未来会有所改变。 是的,我注意到了。但至少对我来说还好。如果有跨平台解决方案就好了 这里要编辑的文件当然是package,json在你本地firebase项目的根目录下【参考方案2】:它想要检查你的云函数,这意味着它会检查你的代码是否有明显的错误,就像编译语言会在编译时抛出错误一样。
这不是必需的,您可以随时通过进入 firebase.json 并将 functions.predeploy 更新为空数组来删除它。
"functions":
"predeploy": [],
"source": "functions"
What is "Linting"?
【讨论】:
我已经尝试了所有上述替换,但有时它在部署单个函数而不替换现有函数时显示错误,所以在firebase.json
文件中我用这个替换了所有代码>>>
它对我有用,
Linting 是有原因的。它可以降低错误代码导致高额费用的风险(无限循环,未解决的承诺,......)。 Inzamam Malik 的解决方案似乎更适合我。
谢谢!删除预部署命令有效。【参考方案3】:
您可以像这样简单地制作您的 firebase.json 文件:
"functions":
"predeploy": [
"npm --prefix ./functions/ run lint",
"npm --prefix ./functions/ run build"
]
我正在做的是将 $RESOURCE_DIR 替换为函数文件夹的硬编码路径 对我来说很好用
【讨论】:
值得指出我的firebase.json
只包含第一行(... lint",
,但在该行中将\"$RESOURCE_DIR\"
替换为./functions/
解决了这个问题。
这个很有用【参考方案4】:
总结
在本地安装 ESLint 以将“devDependencies”添加到 package.json。运行:
`npm install eslint --save-dev`
如上所述的 Windows 解决方法。更改 firebase.json:
`npm --prefix $RESOURCE_DIR run lint` to `npm --prefix %RESOURCE_DIR% run lint`
(可选)将以下内容添加到 package.json:
"scripts": "lint": "eslint" or "scripts": "lint": "eslint.js"
【讨论】:
【参考方案5】:找到 firebase.json 文件 然后更改这些行
"npm --prefix \"$RESOURCE_DIR\" run lint",
"npm --prefix \"$RESOURCE_DIR\" run build"
到
"npm --prefix \"%RESOURCE_DIR%\" run lint",
"npm --prefix \"%RESOURCE_DIR%\" run build"
会有用的
【讨论】:
这对我也有用,但我不明白为什么会这样。请解释一下。 实际上在windows中它不理解'$'符号它仅适用于linux系统但windows理解'%'符号【参考方案6】:将 firebase.json 中的“npm --prefix $RESOURCE_DIR run lint
”修改为“npm --prefix %RESOURCE_DIR% run lint
”
【讨论】:
【参考方案7】:这应该可以解决问题而无需解决方法
npm install -g git://github.com/firebase/firebase-tools#master
请在您的项目文件夹中再次尝试此安装,它应该可以解决问题。
【讨论】:
我可以确认最新版本没有解决问题,只是安装在新机器(W10,Powershell)上并遇到了它。【参考方案8】:我的云功能部署成功了
"functions":
"predeploy": [
"npm --prefix \"%RESOURCE_DIR%\" run lint",
"npm --prefix \"%RESOURCE_DIR%\" run build"
],`enter code here`
"source": "functions"
【讨论】:
【参考方案9】:旁注,如果您使用的是yarn
(而不是npm
),则需要指定--cwd
参数(而不是--prefix
)
firebase.json
示例:
...
"functions":
"predeploy": [
"yarn --cwd \"$RESOURCE_DIR\" lint",
"yarn --cwd \"$RESOURCE_DIR\" build"
]
,
...
【讨论】:
【参考方案10】:之前的建议都不适合我。所以我删除了 firebase.json 文件的函数部分,如下所示,只保留托管部分。然后,我在没有功能的情况下成功部署了应用程序。
然后,我从终端 cd 到函数并使用 firebase deploy --only
函数部署函数
"hosting":
"public": "build",
"ignore": [
"firebase.json",
"**/.*",
"**/node_modules/**"
],
"rewrites": [
"source": "**",
"destination": "/index.html"
]
【讨论】:
以上是关于在 npm --prefix $RESOURCE_DIR run lint 上使用 firebase 部署时出错的主要内容,如果未能解决你的问题,请参考以下文章
npm run serve 运行报错 Cannot read property ‘prefix_exceptions‘ of undefined 需要先清除缓存数据