Firebase 部署错误以非零退出代码开头(项目路径中的空格)

Posted

技术标签:

【中文标题】Firebase 部署错误以非零退出代码开头(项目路径中的空格)【英文标题】:Firebase deploy errors starting with non-zero exit code (space in project path) 【发布时间】:2018-07-03 21:44:57 【问题描述】:

我最近遇到了 firebase deploy 命令的问题。在 firebase deploy 命令之后,除了 firebase(存储、数据库等)之外,所有其他的都被部署了所以我决定重新安装 firebase 来解决这种情况,但是重新安装后我的问题变得更大了。现在它们都没有部署并出现以下错误:

i deploying database, functions
Running command: npm --prefix $RESOURCE_DIR run lint
npm ERR! path C:\Users\faruk\Google Drive\android\firebase\1\$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\faruk\Google Drive\Android\firebase\1\$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\faruk\AppData\Roaming\npm-cache\_logs\2018-01-24T18_21_34_878Z-debug.log

Error: functions predeploy error: Command terminated with non-zero exit code4294963238

经过一番研究,我看到了一些关于此的主题,建议更改

$RESOURCE_DIR to %RESOURCE_DIR%

在 Windows 系统中(我使用的是 Windows 10 顺便说一句)。因此,我编辑了我的 firebase.json 文件,该文件位于我的函数文件夹的上一层。像这样。 (我不知道这是否是我应该编辑的正确文件)

  "database": 
    "rules": "database.rules.json"
  ,
  "functions": 
    "predeploy": [
      "npm --prefix %RESOURCE_DIR% run lint"
    ]
  

但在此编辑之后,我开始收到另一条类似的错误消息。

i  deploying database, functions
Running command: npm --prefix %RESOURCE_DIR% run lint

Usage: npm <command>

where <command> is one of:
    access, adduser, bin, bugs, c, cache, completion, config,
    ddp, dedupe, deprecate, dist-tag, docs, doctor, edit,
    explore, get, help, help-search, i, init, install,
    install-test, it, link, list, ln, login, logout, ls,
    outdated, owner, pack, ping, prefix, profile, prune,
    publish, rb, rebuild, repo, restart, root, run, run-script,
    s, se, search, set, shrinkwrap, star, stars, start, stop, t,
    team, test, token, tst, un, uninstall, unpublish, unstar,
    up, update, v, version, view, whoami

npm <command> -h     quick help on <command>
npm -l           display full usage info
npm help <term>  search for help on <term>
npm help npm     involved overview

Specify configs in the ini-formatted file:
    C:\Users\faruk\.npmrc
or on the command line via: npm <command> --key value
Config info can be viewed via: npm help config

npm@5.6.0 C:\Program Files\nodejs\node_modules\npm

Error: functions predeploy error: Command terminated with non-zero exit code1

感谢任何建议。提前致谢。

【问题讨论】:

【参考方案1】:

错误源于您在项目路径(“Google Drive”)的某处有空间:

C:\Users\faruk\Google Drive\Android\firebase\1\$RESOURCE_DIR\package.json

不幸的是,这会混淆 npm 命令行,它会将其视为由空格分隔的两个参数。

通常,我希望能够在整个内容周围加上引号,以防止空间被这样解释。所以我尝试了这个:

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

它对我有用。

我将在内部与 Firebase 团队跟进此问题,以及需要针对 Windows 进行更改的事实。

【讨论】:

非常感谢,因为我一直在同一个目录下工作,我认为这不会导致错误。像魅力一样工作。 嗯,lint predeploy 钩子在 CLI 3.17.0 及更高版本创建的项目中是新的,这是非常新的。所以你正在运行你以前可能没有的东西。检查您的其他 Firebase 项目的 firebase.json 以了解我的意思。 @DougStevenson 这仍然是一个问题,您是否设法在内部跟进?附:我在 Mac 上 谢谢道格。您为我节省了数小时的调试时间。【参考方案2】:

实际发生的情况是,在 Windows 中,firebase.json 默认包含以下内容:

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

修改为:

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

它对我有用,希望它对你有用。

【讨论】:

【参考方案3】:

“预部署”:[ "npm --prefix \"$RESOURCE_DIR\" 运行 lint" ]

我最后在 firebase.json 上删除了它,它又开始部署了

【讨论】:

它确实有效,但它的用途是什么?为什么它首先存在?【参考方案4】:

在 firebase.json 中将 $RESOURCE_DIR 更改为 %RESOURCE_DIR% 后,这对我有用


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

【讨论】:

【参考方案5】:

对我来说,以上都不起作用。最初,在全新的 firebase-function 安装中,我在 non-zero exit code2 上遇到错误。所以我删除了函数目录,重新安装,但是在函数目录配置步骤中,我选择对 add-lint 步骤说“不”。

一旦我选择不包含 lint,就会收到错误 non-zero exit code1

从那里检查了我的 firebase.json 文件并查看了预部署脚本。因为此时部署过程失败了,所以这就是我开始的地方。我的 firebase.json 文件如下所示:


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

出于某种原因,我直觉地想删除预部署脚本中的lint。这解决了一切。顺便说一句,我在 MacOS 上..

【讨论】:

【参考方案6】:

我在 Windows 中遇到了同样的问题。我所做的是复制 functions 文件夹中的所有文件并将其传递到 %RESOURCE_DIR% 文件夹,然后运行 ​​Firebase 部署并成功部署。 p>

【讨论】:

【参考方案7】:

在项目的functions 文件夹中运行npm install。可能你在index.ts中导入了一个或多个节点模块,但没有安装,这种情况下你需要运行npm install module_not_installed_yet --save

【讨论】:

【参考方案8】:

对我来说,问题是(我认为)因为firebase 找不到脚本。

没用:


  "hosting": 
    "predeploy": "predeploy.sh",
    ...

Running command: predeploy.sh
events.js:160
      throw er; // Unhandled 'error' event
      ^

Error: spawn predeploy.sh ENOENT
    at exports._errnoException (util.js:1020:11)
    at Process.ChildProcess._handle.onexit (internal/child_process.js:193:32)
    at onErrorNT (internal/child_process.js:367:16)
    at _combinedTickCallback (internal/process/next_tick.js:80:11)
    at process._tickCallback (internal/process/next_tick.js:104:9)
    at Module.runMain (module.js:606:11)
    at run (bootstrap_node.js:389:7)
    at startup (bootstrap_node.js:149:9)
    at bootstrap_node.js:504:3

Error: hosting predeploy error: Command terminated with non-zero exit code1

确实有效:(注意./


  "hosting": 
    "predeploy": "./predeploy.sh",
    ...

【讨论】:

【参考方案9】:

使用 VS 代码时,打开 Firecast 的文件夹(这有助于打开资源目录的 firebase.json)在 firebase.json 中更改文件代码到这里:


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

【讨论】:

【参考方案10】:

在我的例子中,我创建了一个打印日志的函数,如下所示:

function log(tag: string, value: any) 
    console.log(tag, JSON.stringify(value));

当我在它前面添加async 时,它开始爆炸构建:)

【讨论】:

【参考方案11】:

我修好了:你必须注意另一个地方

你看到错误描述了吗

$ firebase deploy --only functions

=== Deploying to 'fix-firebase-functions'...

i  deploying functions
Running command: npm --prefix "$RESOURCE_DIR" run lint

> functions@ lint C:\Users\vuduc\OneDrive\Tài liệu\Code tutotial         practice\test\functions
> eslint .


C:\Users\vuduc\OneDrive\Tài liệu\Code tutotial practice\test\functions\index.js
  37:16  warning  Avoid nesting promises                      promise/no-nesting
  42:13  error    Expected catch() or return                  promise/catch-or-return
  42:13  warning  Avoid nesting promises                      promise/no-nesting
  42:31  error    Each then() should return a value or throw  promise/always-return

✖ 4 problems (2 errors, 2 warnings)

npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! functions@ lint: `eslint .`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the functions@ lint script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

npm ERR! A complete log of this run can be found in:
npm ERR!     C:\Users\vuduc\AppData\Roaming\npm-cache\_logs\2020-06-01T14_38_16_060Z-debug.log
events.js:287
    throw er; // Unhandled 'error' event
      ^

Error: spawn npm --prefix "%RESOURCE_DIR%" run lint ENOENT
    at notFoundError (C:\Users\vuduc\AppData\Local\Yarn\Data\global\node_modules\cross-env\node_modules\cross-spawn\lib\enoent.js:6:26)
    at verifyENOENT (C:\Users\vuduc\AppData\Local\Yarn\Data\global\node_modules\cross-env\node_modules\cross-spawn\lib\enoent.js:40:16)
    at ChildProcess.cp.emit (C:\Users\vuduc\AppData\Local\Yarn\Data\global\node_modules\cross-env\node_modules\cross-spawn\lib\enoent.js:27:25)
    at Process.ChildProcess._handle.onexit (internal/child_process.js:275:12)
Emitted 'error' event on ChildProcess instance at:
    at ChildProcess.cp.emit (C:\Users\vuduc\AppData\Local\Yarn\Data\global\node_modules\cross-env\node_modules\cross-spawn\lib\enoent.js:30:37)
    at Process.ChildProcess._handle.onexit (internal/child_process.js:275:12)         

  code: 'ENOENT',
  errno: 'ENOENT',
  syscall: 'spawn npm --prefix "%RESOURCE_DIR%" run lint',
  path: 'npm --prefix "%RESOURCE_DIR%" run lint',
  spawnargs: []


Error: functions predeploy error: Command terminated with non-zero exit code1

error deploy cloud functions 您需要向上滚动才能看到错误描述,即

functions predeploy error: Command terminated with non-zero exit code1

只是一个一般性的描述,在部署之前有一个错误需要修复。 这是真正需要注意的地方,您需要修复哪些说明?

✖ 4 problems (2 errors, 2 warnings)

Pay attention here

【讨论】:

【参考方案12】:

我通过重新启动 firebase init 来解决这个问题,然后不选择使用 eslint。之后部署工作。

【讨论】:

以上是关于Firebase 部署错误以非零退出代码开头(项目路径中的空格)的主要内容,如果未能解决你的问题,请参考以下文章

命令 PhaseScriptExecution 以非零退出代码 iOS 失败

命令 PhaseScriptExecution 以非零退出代码失败 - 使用 CocoaPods

Command CompileSwift 在 Xcode 10 中以非零退出代码失败 [重复]

构建新项目时出错 - aapt 以非零退出值 1 完成

zipalign.exe'' 以非零退出值结束

EMR - Pyspark 错误 - 容器以非零退出代码 13 退出。错误文件:prelaunch.err