2016-11-10 64 views
0

我試圖使用aws4 package在Angular2 TypeScript2應用程序中籤署一些請求。我已經安裝了這個軟件包,它位於node_modules將aws4導入Angular2應用程序

在我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會構建代碼,使得nodejs依賴項(如querystring)得到pollyfilled。

有什麼我需要添加到我的TypeScript代碼或Webpack正確使用aws4

+0

什麼版本的TypeScript? – pe8ter

+0

@ pe8ter Typescript 2 –

回答

0

我可以幫你打字的問題,但不是你的墊補內置節點模塊問題:

的TS編譯器不知道aws4模塊的形狀,所以你必須提供它。正如你所說,這個模塊沒有通過npm提供的類型,這意味着你需要爲它創建類型。你所需要的最低限度是一個名爲「aws4.d.ts」與這一行的文件:

declare module "aws4"; 

導入打字「component.ts」與/// <reference path="path/to/aws4.d.ts" />。如果您將輸入與「component.ts」相同的目錄中,那麼您可以跳過reference位。

即使您確實沒有告訴TS關於庫的真實形狀,這種最少的打字方式也會安撫編譯器。

注意:僅僅因爲TS編譯器無法找到依賴關係並不意味着它不會將import語句發送到代碼中。這就是爲什麼你的頁面仍然加載aws4但後來失敗的參考querystring.escape

相關問題