实际上,你需要将 "types": ["node"] 添加到由angular-cli在src目录中创建的 tsconfig.app.json 文件中。默认情况下,types是一个空数组。
https://github.com/aws/aws-sdk-js/issues/1271#issuecomment-291658668
在将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"]
}
}
{
"compilerOptions": {
"types" : ["node", "lodash", "express"]
}
}
typeRoots
也没有定义 types
,则所有 @types 文件夹都会被包含在内。请确保已将 @types/node
安装为 devDependency(npm i -D @types/node
),然后尝试重新编译。 - nwayve我发现几件事情似乎会导致这个问题。感谢Benny Neugebauer在这篇文章中给出的答案:error TS2304: Cannot find name 'Buffer'。
我解决这个问题的关键是要做以下几点。
请使用 NodeJS 的稳定版本,而不是最新版本
使用 npm install -g typings 命令安装 typings 工具
使用 typings install dt~node --global --save 命令安装类型定义
确认您没有安装这些类型,因为它们会导致 Windows 和 OSX 无法同时工作的问题。使用 npm remove @types/node 命令卸载它们。
删除您的 node_modules 文件夹并使用 yarn 命令重建
在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
}
}