具有子目录的节点模块:"Error parsing triggers: Cannot find module 'ibm-watson'"

Node modules with sub-directories: "Error parsing triggers: Cannot find module 'ibm-watson'"

我有一个调用 IBM Watson 来获取令牌的 Firebase Cloud Function。我正在将它从旧的 username/password 身份验证更新为当前的 IAM 身份验证。

这是来自 IBM documentation 的代码:

const watson = require('ibm-watson');
const { IamAuthenticator } = require('ibm-watson/auth');

// to get an IAM Access Token
const authorization = new watson.AuthorizationV1({
  authenticator: new IamAuthenticator({ apikey: 'fakekey-1234' }),
});

authorization.getToken(function (err, token) {
  if (!token) {
    console.log('error: ', err);
  } else {
    // Use your token here
  }
});

当我 运行 firebase deploy --only functions 我得到这个错误:

Error: Error parsing triggers: Cannot find module 'ibm-watson'
Require stack:
- /Users/TDK/LanguageTwo/functions/index.js
- /Users/TDK/.nvm/versions/node/v13.10.1/lib/node_modules/firebase-tools/lib/triggerParser.js

ibm-watson 安装在我的 /functions/node_modules 目录中:

我重新安装了 ibm-watson,并且我 运行 npm install 在我的 functions 目录中。另外我 运行 npm-check 并更新了我所有的节点模块。

导致错误的具体行是:

const watson = require('ibm-watson');

当我注释掉该行时,函数部署没有错误。不幸的是,该函数没有 运行。 :-)

此行不会导致部署错误:

const { IamAuthenticator } = require('ibm-watson/auth');

我在同一 index.js 文件中的其他 Firebase Cloud Functions 中使用 IBM Watson。来自其他函数的这些行不会导致部署错误:

let TextToSpeechV1 = require('ibm-watson/text-to-speech/v1');
...
var LanguageTranslatorV3 = require('ibm-watson/language-translator/v3');

问题似乎是要求父目录ibm-watson失败,但要求父目录的子目录有效。有什么建议吗?

这符合预期。如果您查看 ibm-watson - https://github.com/watson-developer-cloud/node-sdk 的 GitHub 存储库 - 您会注意到没有示例需要顶级库。当您只需要引入一个小的子组件时,这会阻止您引入完整的库。