TypeError:无法读取未定义的“想要”属性:

Posted

技术标签:

【中文标题】TypeError:无法读取未定义的“想要”属性:【英文标题】:TypeError: Cannot read property 'wanted' of undefined: 【发布时间】:2019-11-14 11:46:17 【问题描述】:

我整天都在使用 firebase 成功部署功能,学习如何使用它。我试图看看如果我初始化另一个部署到同一个项目的目录并且在我更新我的 npm 版本之前没有问题会发生什么,现在每当我尝试部署时我都会收到“发生意外错误”

我尝试通过让我自己的用户成为 node_modules、bin 和 share 目录的所有者来更新 npm 权限。我已经尝试卸载并重新安装 firebase-tools。我还尝试删除所有当前的函数目录并初始化一个新目录并在其中重新安装我的依赖项。

这是调试日志

Dylans-MacBook-Pro-3:functions dsenderling$ firebase deploy --debug
[2019-07-03T18:04:35.526Z] ----------------------------------------------------------------------
[2019-07-03T18:04:35.528Z] Command:       /usr/local/bin/node /usr/local/bin/firebase deploy --debug
[2019-07-03T18:04:35.529Z] CLI Version:   7.0.2
[2019-07-03T18:04:35.529Z] Platform:      darwin
[2019-07-03T18:04:35.529Z] Node Version:  v10.16.0
[2019-07-03T18:04:35.529Z] Time:          Wed Jul 03 2019 13:04:35 GMT-0500 (Central Daylight Time)
[2019-07-03T18:04:35.529Z] ----------------------------------------------------------------------

[2019-07-03T18:04:35.537Z] > command requires scopes: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase","https://www.googleapis.com/auth/cloud-platform"]
[2019-07-03T18:04:35.537Z] > authorizing via signed-in user
[2019-07-03T18:04:35.537Z] [iam] checking project my-awesome-project-5a4e9 for permissions ["cloudfunctions.functions.create","cloudfunctions.functions.delete","cloudfunctions.functions.get","cloudfunctions.functions.list","cloudfunctions.functions.update","cloudfunctions.operations.get","firebase.projects.get"]
[2019-07-03T18:04:35.539Z] >>> HTTP REQUEST POST https://cloudresourcemanager.googleapis.com/v1/projects/my-awesome-project-5a4e9:testIamPermissions  
 permissions=[cloudfunctions.functions.create, cloudfunctions.functions.delete, cloudfunctions.functions.get, cloudfunctions.functions.list, cloudfunctions.functions.update, cloudfunctions.operations.get, firebase.projects.get]
[2019-07-03T18:04:35.769Z] <<< HTTP RESPONSE 200 content-type=application/json; charset=UTF-8, vary=X-Origin, Referer, Origin,Accept-Encoding, date=Wed, 03 Jul 2019 18:04:35 GMT, server=ESF, cache-control=private, x-xss-protection=0, x-frame-options=SAMEORIGIN, x-content-type-options=nosniff, server-timing=gfet4t7; dur=83, alt-svc=quic=":443"; ma=2592000; v="46,43,39", accept-ranges=none, transfer-encoding=chunked
[2019-07-03T18:04:37.033Z] TypeError: Cannot read property 'wanted' of undefined
    at /usr/local/lib/node_modules/firebase-tools/lib/checkFirebaseSDKVersion.js:37:51
    at process._tickCallback (internal/process/next_tick.js:68:7)

Error: An unexpected error has occurred.

我的直觉告诉我 firebase-tools 或我的 firebase sdk 有问题,但我不知道是什么问题。提前致谢

【问题讨论】:

我浏览了很多关于外观相似的 TypeErrors 的帖子,但不幸的是,我找不到任何似乎与我的原因相同的帖子。我已经尝试解决的问题主要来自这里的其他帖子。 尝试将 ffirebase-tools 更新到 7.1.1,它对我有用 【参考方案1】:

这也开始发生在我身上......

看起来npm 正在为此命令输出不同的结果

npm outdated firebase-functions --json=true
// for me outputs  \n

脚本 checkFirebaseSDKVersion.js 期待这样的事情(如果你的 firebase-functions 实际上已经过时,它会得到)


  "current": "2.5.0",
  "wanted": "2.5.0",
  "latest": "3.0.2",
  "location": "node_modules/some path /firebase-functions"

或者一个空白输出......在你的情况下更有可能

你可以做些什么来“修复”它

这可能会很快得到解决,因为它开始影响更多人...... 目前 调整 /usr/local/lib/node_modules/firebase-tools/lib/checkFirebaseSDKVersion.js

添加这个以说明第 24 行附近 \n 的更新空输出

            if (data && data.toString() !== "\n") 
                output = JSON.parse(data.toString("utf8")); // existing Code!
            

不确定 npm 的更新过程是如何工作的,因此您可能必须在修复后恢复它以更新它,但我不这么认为。

希望有帮助!

【讨论】:

感谢您的回答,我尝试编辑该文件,但现在我得到一个缺少的脚本:lint 错误。至少是进步。我是 javascript 新手,所以我会发布我编辑的行,以防我犯了错误。我运行 npm outdated firebase-functions --json=true 并返回 。也很抱歉这条评论中的错误格式我是这个网站的新手,我很难让它漂亮 child.stdout.on("data", function (data) if (data && data.toString() !== "\n") output = JSON.parse(data.toString("utf8")); // 现有代码! ); 现在回滚到以前的 npm 版本更安全 > npm install -g npm@6.9.2【参考方案2】:

我认为这个问题是由 npm 6.10.0 中的修复引起的,请参阅 https://github.com/npm/cli/pull/176。

解决方法是修改/usr/lib/node_modules/firebase-tools/lib/checkFirebaseSDKVersion.js (linux)。 对于 macOS 和 nvm,请参阅下面的 cmets。

来自:

if (!output) 
  return;

到:

if (!output || !output["firebase-functions"]) 
  return;

【讨论】:

刚刚在第 36-38 行尝试了这个,我得到了 npm ERR!缺少脚本:lint。 @dsenderling 嗯,很奇怪。你能提供你的文件吗? 我注意到您的格式错误。您在第 24,26 行有换行符。那些不应该在那里。你加了那些?这就是应该的样子(没有解决方法)github.com/firebase/firebase-tools/blob/v7.0.2/src/… macOS中的路径是/usr/local/lib/node_modules/firebase-tools/lib/checkFirebaseSDKVersion.js 如果你使用 nvm 文件路径就像&lt;user_home&gt;/.nvm/versions/node/v11.1.0/lib/node_modules/firebase-tools/lib/checkFirebaseSDKVersion.js【参考方案3】:

遇到完全相同的问题,在将 npm 从 6.9.2 更新到 6.10.0 后立即开始。

最终降级到 6.9.2 (npm install -g npm@6.9.2),我的 firebase 部署马上又开始工作了。

编辑:firebase 部署使用 npm 6.10.1,现在可以安全更新!

【讨论】:

非常感谢,我很生气试图解决这个问题【参考方案4】:

与 npm@6.12.0 和 firebase-functions@3.3.0 有同样的问题。

TypeError: Cannot read property 'wanted' of undefined
    at /usr/local/lib/node_modules/firebase-tools/lib/checkFirebaseSDKVersion.js:37:51
    at process._tickCallback (internal/process/next_tick.js:68:7)

已通过更改 /usr/local/lib/node_modules/firebase-tools/lib/checkFirebaseSDKVersion.js 第 37 行来修复。

var wanted = (output["firebase-functions"] || ).wanted;
var latest = (output["firebase-functions"] || ).latest;

【讨论】:

【参考方案5】:

试试:

npm i -g firebase-tools@latest

【讨论】:

【参考方案6】:

由于 Mac 上旧版本的 Firebase CLI,我遇到了同样的问题,尝试使用标准命令 npm 命令进行更新 ==> npm install -g firebase-tools 没有帮助,因为它表明我的 CLI 已更新,但部署功能命令是选择一个旧的缓存版本,所以对我有用的是使用 自动安装脚本 升级到最新版本:-

curl -sL firebase.tools | upgrade=true bash

更多详情可以查看官方文档here

【讨论】:

以上是关于TypeError:无法读取未定义的“想要”属性:的主要内容,如果未能解决你的问题,请参考以下文章

TypeError:无法读取 MEAN 堆栈中未定义的属性“_id”

Angular TypeError:无法读取未定义的属性“名称”

如何使用自定义错误消息捕获“TypeError:无法读取未定义的属性(读取'0')”?

TypeError:无法读取未定义的属性(读取“名称”)

TypeError:无法读取未定义的属性“findAll”(expressjs)

TypeError:无法读取未定义的属性(读取“问题”)