在 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 部署时出错的主要内容,如果未能解决你的问题,请参考以下文章

错误 Firebase 预部署代码 254

npm工具之postcss

npm-folders

npm run serve 运行报错 Cannot read property ‘prefix_exceptions‘ of undefined 需要先清除缓存数据

cmd输入npm没反应,npm install 没反应

修改 npm 全局安装目录