我正在尝试使用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
?
答案 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
失败的原因。