带有子目录的节点模块:“错误解析触发器:找不到模块'ibm-watson'”

我有一个Firebase Cloud Function,它调用IBM Watson获取令牌。我正在将其从旧的用户名/密码身份验证更新为当前的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'”

我重新安装了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失败,但是要求父目录的子目录有效。有什么建议吗?

shinelqw 回答:带有子目录的节点模块:“错误解析触发器:找不到模块'ibm-watson'”

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

本文链接:https://www.f2er.com/2662383.html

大家都在问