在整合“amazon-cognito-identity-js”时,Ionic应用程序中找不到名称为'Buffer'的内容。

3

enter image description here

在整合 'amazon-cognito-identity-js' 时,ionic 应用程序中找不到名称为 'Buffer' 的内容。

注:此处的“Buffer”指的是Node.js中的Buffer对象。

请提供相关的上下文。阅读[mcve]。 - Suraj Rao
通常情况下,如果问题包括代码的预期目的以及为什么这样做可以解决问题而不会引入其他问题的解释,那么问题会更有帮助。 - Peter
3个回答

1

0

在将amazon-cognito-identity-js引入Angular 4应用程序时,我遇到了类似的问题。基本上,TypeScript不理解这些Node类型(Buffer、http、stream、fs等)。要理解原因,我们需要查看TypeScript如何指定要包含的软件包

默认情况下,所有可见的“@types”软件包都包含在编译中。任何封闭文件夹的node_modules/@types中的软件包都被视为可见;具体来说,这意味着./node_modules/@types/、../node_modules/@types/、../../node_modules/@types/等文件夹中的软件包。

如果指定了typesRoots,则只包括typeRoots下的软件包。例如:

{
   "compilerOptions": {
       "typeRoots" : ["./typings"]
   }
}

这个配置文件将包含./typings下的所有包,但不包括./node_modules/@types中的任何包。 如果指定了types,则只包括列出的包。例如:
{
   "compilerOptions": {
       "types" : ["node", "lodash", "express"]
   }
}

这个 tsconfig.json 文件只包括 ./node_modules/@types/node、./node_modules/@types/lodash 和 ./node_modules/@types/express。node_modules/@types/* 下的其他包将不会被包含。
很抱歉只能复制/粘贴答案,但我无法比文档更好地表达它。
检查是否在任何 tsconfig.json 文件中定义了 "typeRoots" 和/或 "types"(angular-cli 项目有 ./tsconfig.json 和 ./app/tsconfig.app.json 文件)。
如果已定义 "typeRoots",请确保包含 "node_modules/@types"。如果已定义 "types",请确保包含 "node"。
要包括所有 @types,请从 "compilerOptions" 中删除 "typeRoots" 和 "types",但请记住,这可能会在不同类型声明之间创建冲突,因此最好的选择可能是在 "types" 属性中包含 "node"。

我遇到了同样的问题,但是在tsconfig.json文件中没有定义typeRoots或types。有人找到了答案吗? - JasonPerr
如果你遇到了这个问题,那么这意味着 TypeScript 编译器不知道已安装的 node_modules 依赖项所依赖的基本 Node 类型。如果既没有定义 typeRoots 也没有定义 types,则所有 @types 文件夹都会被包含在内。请确保已将 @types/node 安装为 devDependency(npm i -D @types/node),然后尝试重新编译。 - nwayve
{btsdaf} - JasonPerr

0

我发现几件事情似乎会导致这个问题。感谢Benny Neugebauer在这篇文章中给出的答案:error TS2304: Cannot find name 'Buffer'

我解决这个问题的关键是要做以下几点。

  1. 请使用 NodeJS 的稳定版本,而不是最新版本

  2. 使用 npm install -g typings 命令安装 typings 工具

  3. 使用 typings install dt~node --global --save 命令安装类型定义

  4. 确认您没有安装这些类型,因为它们会导致 Windows 和 OSX 无法同时工作的问题。使用 npm remove @types/node 命令卸载它们。

  5. 删除您的 node_modules 文件夹并使用 yarn 命令重建

  6. app.component.ts中添加引用路径

     /// <reference path="../../typings/index.d.ts" />
    
     export class YourClass {
    

完成这些操作后,一切都正常了。这是在Windows 10环境和OSX环境中唯一有效的解决方案。我的最终tsconfig.json文件如下所示,供参考。

   {
  "compilerOptions": {
    "allowSyntheticDefaultImports": true,
    "declaration": false,
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "lib": [
      "dom",
      "es2015"
    ],
    "module": "es2015",
    "moduleResolution": "node",
    "sourceMap": true,
    "target": "es5"
  },
  "include": [
    "src/**/*.ts"
  ],
  "exclude": [
    "node_modules"
  ],
  "compileOnSave": false,
  "atom": {
    "rewriteTsconfig": false
  }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接