【问题标题】:Importing aws4 into an Angular2 app将 aws4 导入 Angular2 应用程序
【发布时间】:2016-11-10 23:41:28
【问题描述】:

我正在尝试使用 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 依赖项得到 pollyfill。

为了正确使用aws4,我需要在我的 TypeScript 代码或 Webpack 中添加什么吗?

【问题讨论】:

  • 什么版本的 TypeScript?
  • @pe8ter Typescript 2

标签: angular typescript webpack


【解决方案1】:

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

TS 编译器不知道aws4 模块的形状,因此您必须提供它。正如您所说,该模块没有通过 npm 提供的类型,这意味着您需要为它创建类型。您至少需要一个名为“aws4.d.ts”的文件,其中包含这一行:

declare module "aws4";

使用/// <reference path="path/to/aws4.d.ts" /> 导入“component.ts”中的输入。如果您将输入内容与“component.ts”放在同一目录中,则可以跳过reference 位。

即使您确实没有告诉 TS 库的真实形状,这种最小的输入也能安抚编译器。

注意:TS 编译器找不到依赖项并不意味着它不会将 import 语句发送到您的代码中。这就是为什么您的页面仍然加载 aws4 但后来在引用 querystring.escape 时失败。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-04-05
    • 2017-05-11
    • 2017-01-06
    • 2016-12-30
    • 1970-01-01
    • 2017-03-31
    • 1970-01-01
    • 2017-02-25
    相关资源
    最近更新 更多