将aws4导入Angular2应用程序

时间:2016-11-10 23:41:29

标签: angular typescript webpack

我正在尝试使用aws4 package在Angular2 TypeScript2应用中签署一些请求。我已经安装了该软件包,它位于node_modules

在我的component.ts文件中,我尝试将其导入:

import * as aws4 from 'aws4';

当我使用webpack构建项目时,我的代码会抱怨Cannot find module 'aws4'。但是,在同一目录中,如果我启动节点并运行require('aws4')它可以工作,那么模块就在那里并且已经安装。

@types/aws4也不可用。

有趣的是,即使TypeScript抱怨它无法找到aws4,它似乎仍然可以正确导入。但是,我在浏览器中遇到了不同的错误:querystring.escape is not a function。我认为Webpack会构建代码,以便像querystring这样的nodejs依赖项得到pollyfilled。

我是否需要添加到我的TypeScript代码或Webpack以正确使用aws4

1 个答案:

答案 0 :(得分:0)

我可以帮助您解决打字问题,但不能解决内置节点模块问题:

TS编译器不知道aws4模块的形状,因此您必须提供它。正如你所说,该模块没有通过npm提供的打字,这意味着你需要为它创建打字。您需要的最小值是名为" aws4.d.ts"的文件。这一行:

declare module "aws4";

输入&#34; component.ts&#34;与/// <reference path="path/to/aws4.d.ts" />。如果你把输入放在和#34; component.ts&#34;相同的目录中。然后你可以跳过reference位。

即使你真的没有告诉TS关于库的真实形状,这个最小的打字会安抚编译器。

注意:仅仅因为TS编译器无法找到依赖关系并不意味着它不会将import语句发送到您的代码中。这就是为什么您的网页仍会加载aws4但后来导致querystring.escape失败的原因。